如何通过传递Java类中的参数来调用jar

时间:2019-07-03 07:05:22

标签: java spring-boot jar

我有一个spring boot项目,并在其中创建了一个jar,然后通过传递参数从另一个项目中调用此jar。

无法获得输出并且卡住了。

下面是我从中得到一个罐子的项目。

public class Demo1Application {

    public static void main(String[] args) {
        System.out.println("jar called");
        for(String arg : args) {
            System.out.println("next argument is"+ arg );
        }
        SpringApplication.run(Demo1Application.class, args);
    }

}

它是一个简单的spring boot主类。

下面是另一个我想通过传递参数来调用此jar的项目的类。

public class AAAAAAAAAAAAAAAAA {

    public static void main(String[] args) throws IOException, InterruptedException {

            File jarFile = new File("D:\\NewConfigWorkSpace\\Demo1\\target\\Demo1-0.0.1-SNAPSHOT.jar");

            Process p = Runtime.getRuntime().exec("java -jar D:\\NewConfigWorkSpace\\Demo1\\target\\Demo1-0.0.1-SNAPSHOT.jar bisnu mohan");
            p.waitFor();
            System.out.println("finished");
    }

}

当我调用jar时如何查看控制台,如何跟踪发生了多少执行。

2 个答案:

答案 0 :(得分:0)

您需要的是创建过程的输入流。这是运行应用程序时通常返回到控制台的内容。

Process p = Runtime.getRuntime().exec("java -jar D:\\NewConfigWorkSpace\\Demo1\\target\\Demo1-0.0.1-SNAPSHOT.jar bisnu mohan");
InputStream inputStream = p.getInputStream();

然后您可以阅读其中的内容并打印到正在运行的进程的控制台,如下所示:

StringBuilder outputLines = new StringBuilder();
String output;
try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, UTF_8))) {
     String line;
     while ((line = reader.readLine()) != null) {
           logger.info("Command execution output: " + line);
           outputLines.append(line).append("\n");
     }
} finally {
     output = outputLines.toString().trim();
}

以同样的方式处理错误流也是一个好主意,因为这样您就可以查看子进程是否返回了一些错误。

InputStream errorStream = p.getErrorStream();

在单独的线程中使用此流处理,这样它们就不会彼此阻塞。

答案 1 :(得分:0)

从我的角度来看,您不需要通过命令行执行JAR。

如果将JAR包含到您的项目中,则可以从JAR导入SpringApplication并像这样直接运行它:

public class AAAAAAAAAAAAAAAAA {

    public static void main(String[] args) throws IOException, InterruptedException {
        SpringApplication.run(Demo1Application.class, args);    
    }
}