无法通过java代码执行java-jar命令
我有一个非常基本的无法通过java代码执行java-jar命令,java,windows,jar,executable-jar,ps,Java,Windows,Jar,Executable Jar,Ps,我有一个非常基本的springboot应用程序JAR,它公开了一个API。 我所要做的就是使用以下代码以编程方式启动JAR 问题是我没有看到任何输出或异常,但JAR没有启动。我尝试将端口更改为尚未绑定但仍无法工作的端口 但是,当我手动进入cmd和cd到C:\LDC\dev server目录并执行java-jar-todo-rest-app-0.0.1-SNAPSHOT.jar--server.port=8081时,应用程序启动,我可以用http://localhost:8080/todosurl
springboot
应用程序JAR
,它公开了一个API
。
我所要做的就是使用以下代码以编程方式启动JAR
问题是我没有看到任何输出或异常,但JAR没有启动。我尝试将端口更改为尚未绑定但仍无法工作的端口
但是,当我手动进入cmd
和cd
到C:\LDC\dev server
目录并执行java-jar-todo-rest-app-0.0.1-SNAPSHOT.jar--server.port=8081
时,应用程序启动,我可以用http://localhost:8080/todos
url
Main.java
public class Main {
public static void main(String[] args) throws IOException, InterruptedException {
new Main ().executeJar(new File("todo-rest-app-0.0.1-SNAPSHOT.jar"));
}
private void executeJar(File artifact) throws IOException, InterruptedException {
String jarName = "C:\\LDC\\dev-server\\" + artifact.getName();
System.out.println("jarName: " + jarName);
Process ps = Runtime.getRuntime().exec("java -jar " + jarName + " --server.port=8081");
ps.waitFor();
java.io.InputStream is = ps.getInputStream();
byte b[] = new byte[is.available()];
is.read(b, 0, b.length);
System.out.println(new String(b));
}
}
输出:
jarName: C:\LDC\dev-server\todo-rest-app-0.0.4-SNAPSHOT.jar
Process finished with exit code -1
基于@Sabmit提供的SO链接,我发布了对我有效的解决方案
private void executeJar2(File artifact) throws IOException, InterruptedException {
ProcessBuilder pb = new ProcessBuilder("C:\\JDK\\1.8.0.181\\bin\\java", "-jar", artifact.getName(), "--server.port=8081");
pb.directory(new File("C:\\LDC\\dev-server\\"));
Process p = pb.start();
}
我不知道你的名字。在您的输出中有
I:\LDC
,但在您的代码中指定了C:\\LDC…
是否正确?问题是因为运行Runtime.exec不“加载”/不知道您的所有系统设置。您需要提供java的完整路径。或者,您可以从运行时运行cmd,然后导入命令。@IsThisJavascript-请为输入错误道歉。是C:。编辑我的问题以反映正确的驱动器。@Sambit-这绝对是我要找的。谢谢