Как вызвать jar, передав аргументы из класса java - PullRequest
0 голосов
/ 03 июля 2019

У меня есть весенний загрузочный проект, из которого я создал 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);
    }

}

Это основной класс простой пружинной загрузки.

Ниже приведен класс другого проекта.из которого я хочу вызвать эту банку, передав аргументы.

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");
    }

}

Как увидеть консоль, когда я вызываю банку, как отследить, сколько выполнения было выполнено.

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

С моей точки зрения, вам не нужно выполнять JAR через командную строку.

Если вы включите JAR в свой проект, вы можете просто импортировать SpringApplication из JAR и запустить его прямо так:

public class AAAAAAAAAAAAAAAAA {

    public static void main(String[] args) throws IOException, InterruptedException {
        SpringApplication.run(Demo1Application.class, args);    
    }
}
0 голосов
/ 03 июля 2019

Вам нужен входной поток созданного процесса. Это то, что обычно возвращается на консоль при запуске приложения.

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();

Используйте эту обработку потоков в отдельных потоках, чтобы они не блокировали друг друга.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...