Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法通过java代码执行java-jar命令_Java_Windows_Jar_Executable Jar_Ps - Fatal编程技术网

无法通过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-这绝对是我要找的。谢谢