Мне нужно запустить две строки в Runtime.getRuntime().exec(), эти две:
cd %CMS_HOME%
ant deploy
Теперь можно сделать файл .bat
, но я думаю, что это бесполезно для двух строк, должно быть проще! У кого-нибудь есть идеи?
Мне нужно запустить две строки в Runtime.getRuntime().exec(), эти две:
cd %CMS_HOME%
ant deploy
Теперь можно сделать файл .bat
, но я думаю, что это бесполезно для двух строк, должно быть проще! У кого-нибудь есть идеи?
Поместите его в файл .bat
. Это не бесполезно; именно так работает Runtime.exec.
Вам следует изучить возможность использования ProcessBuilder. класс вместо Runtime.exec()
. Он был представлен в JDK 5 как преемник Runtime.exec()
.
Запустите задачу программно из Java:
File buildFile = new File("build.xml");
Project p = new Project();
p.setUserProperty("ant.file", buildFile.getAbsolutePath());
p.init();
ProjectHelper helper = ProjectHelper.getProjectHelper();
p.addReference("ant.projectHelper", helper);
helper.parse(p, buildFile);
p.executeTarget(p.getDefaultTarget());
Вы можете использовать Runtime.exec(String command, String[] envp, File dir)
для выполнения ant deploy
в папке dir
.
P.S. Выполнение ant, являющегося Java-программой, с использованием пакетного файла из другой Java-программы немного странно. Вы можете запустить его как класс Java...
Когда вы запускаете внешнее приложение, вы должны вести себя в соответствии с правилами целевой операционной системы.
В вашем случае вы хотите запустить 2 команды в окнах, поэтому вы должны сказать:
cd TheDir && ant
Попробуйте сначала в командной строке. Затем, чтобы заставить его работать, запустите эту команду с префиксом cmd
из java:
cmd /c cd TheDir && ant
В качестве альтернативы вы можете использовать чистое решение Java. Используйте ProcessBuilder
вместо Runtime.exec()
. ProcessBuilder позволяет вам установить рабочий каталог, чтобы вы могли запускать ant
напрямую.
И последний пункт. На самом деле вам вообще не нужно запускать внешний процесс. Ant — это Java-приложение. Вы можете запустить его метод main()
прямо из своего приложения и указать все необходимые параметры.
cmd
, вероятно, должна включать кавычки: cmd /c "cd TheDir && ant"
, иначе более вероятно, что &&
будет отделять всю часть cmd /c cd TheDir
от ant
, чем только cd TheDir
. EDIT: Только что протестировано, и да, это то, что действительно происходит, поэтому действительно необходимы двойные кавычки.
- person Andriy M; 13.03.2012