我有一个非常基本的Spring Boot
应用程序JAR
,它公开了API
。
我要做的就是使用以下代码以编程方式启动JAR
。
问题是我没有看到任何输出或异常,但JAR无法启动。我尝试将端口更改为尚未绑定但仍然无法使用的端口。
但是,当我手动进入cmd
和cd
进入C:\LDC\dev-server
目录并执行java -jar todo-rest-app-0.0.1-SNAPSHOT.jar --server.port=8081
时,应用程序启动,我可以使用{{1 }}网址。
Main.java
http://localhost:8080/todos
输出:
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));
}
}
答案 0 :(得分:1)
基于@Sabmit提供的SO链接Execute .jar file from a Java program,我正在发布对我有用的解决方案。
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();
}