Java无法在Java中执行CMD命令
我有个问题。我正在尝试在 Java 中执行以下命令:
cd C:UsersAlexanderProjects/Simulator && mvn package
在 CMD 命令行中,此命令确实被正确执行,但是当我尝试使用以下代码在 java 中运行它时:
try {
String compileSimulatorCommand = "cd C:/Users/Alexander/Projects/Simulator && mvn package";
Process compileSimulatorProcess = Runtime.getRuntime().exec(compileSimulatorCommand);
compileSimulatorProcess.waitFor();
}
catch (Exception e) {
e.printStackTrace();
}
但这会返回以下错误:
java.io.IOException: Cannot run program "cd": CreateProcess error=2, The system cannot find the file specified
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1142)
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073)
at java.base/java.lang.Runtime.exec(Runtime.java:591)
at java.base/java.lang.Runtime.exec(Runtime.java:415)
at java.base/java.lang.Runtime.exec(Runtime.java:312)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
at java.base/java.lang.ProcessImpl.create(Native Method)
at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:483)
at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158)
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1109)
我怎样才能解决这个问题?
回答
你不能cd作为命令运行。您可以exec在执行命令时设置工作目录。
Process compileSimulatorProcess = Runtime
.getRuntime()
.exec(
"mvn package",
null,
new File("C:/Users/Alexander/Projects/Simulator"));
也可能需要 import java.io.File
有关此 exec 重载的更多信息,请参阅文档。