Я понимаю, что длинный однострочный код ниже выглядит смешно, но, пожалуйста, рассматривайте его как псевдокод. У меня есть скрипт, который выполняет 11 строк команд подряд. Я успешно реализовал его с помощью AutoItX (аналогично Selenium), но это действительно только решение на уровне поверхности. Имитированные нажатия кнопок оставляют место для ошибок и прерываний и просто не чувствуют себя как чистый код. Я хочу, чтобы сама командная строка выполняла сценарий с использованием среды выполнения Java.Как выполнить несколько команд с использованием Java Runtime?
sendCommand("cmd cd " + homepath + "\\" + a + "&&" + "mvn archetype:generate -DarchetypeCatalog=file://"+ homepath + "/.m2/repository" + "&&" + "1" + "&&" + c + "&&" + b + "&&" + c + "&&" + uuid.toString() + "&&" + "Y" + "&&" + "cd " + homepath +"\\"+ a +"\\" + b + "&&" + "mvn clean install" + "&&" + "cd " + homepath +"\\" + a + "&&" + "cd " + homepath +"\\" + a +"\\" + b + "\\" + b + "-plugin" + "\\target" + "&&" + "jar -xvf " + zipDirectory + "&&" + "cmd cd " + homepath +"\\" + a +"\\" + b + "\\" + b + "-plugin" + "\\target\\" + "\\META-INF\\maven\\" + c + "\\" + b + "-plugin" + "&&" + "copy pom.xml " + pluginDirectory + "&&" + "cd " + pluginDirectory + "&&" + "rename pom.xml " + b + "-plugin-1.0.0.pom" + "&&" + "color 0a");
private static void sendCommand(String text) throws IOException, InterruptedException {
Runtime.getRuntime().exec(text);
}
Может ли ProcessBuilder принимать более двух командных строк? Я никогда не видел, чтобы это использовалось раньше. Например, вот две строки:
sendCommand("homepath/plugins", "mvn", "archetype:generate", "-DarchetypeCatalog=file://homepath/.m2/repository");
private static void sendCommand(String workingDirectory, String... command) throws IOException {
Process proc = new ProcessBuilder(command).directory(new File(workingDirectory)).start();
int status = proc.waitFor();
if (status != 0) {
// Handle non-zero exit code, which means the command failed
}
}
Как я могу запустить 11 строк в том же самом процессе, и выполнять каждый из них только после того, как предыдущая была выполнена?
Запустить командную оболочку и кормить команды к нему с помощью стандартного ввода. – EJP
Вы можете изучить такие инструменты, как http://expectj.sourceforge.net/ (или, может быть, что-то новое) – GhostCat
Почему бы не создать скрипт (например, run_mvn.cmd) со всеми командами и проверками внутри и запустить это через 'ProcessBuilder'? Поскольку это очень специфичная задача для платформы/оболочки, я бы передал всю основную работу в cmd/shell. Потому что они построены для такого случая. – SubOptimal