Maven exe c с ProcessBuilder прекращает обработку - PullRequest
0 голосов
/ 24 марта 2020

Я выполняю свой код как;

mvn exec:java@xxxxxxxxxxxx -Dexec.args="hello"

Я не знаю почему, но каким-то образом он останавливает обработку. Он застревает через 10 или 20 секунд. Но это происходит с ProcessBuilder;

Вот как я его запускаю:

public static long runCommandLine(String commandLineArgs){
        try {
            ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", commandLineArgs);
            Process process = pb.start();
            if(!commandLineArgs.contains("runner")) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                while ((reader.readLine()) != null) { /*haha*/}
                process.waitFor();
            }
            return process.pid();
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }

Я посылаю путь файла .bat к методу в качестве аргумента (String commandLineArgs);

.bat файл содержит линии:

cd C:/xxxx/%username%/xxx
mvn exec:java@xxxxxxxxxxxx -Dexec.args="hello"

Если я запускаю файл .bat вручную, все в порядке. Но с ProcessBuilder через некоторое время он застрянет.

pom. xml configutarion:

<plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>1.6.0</version>
                    <executions>
                        <execution>
                            <id>xxxxxxxx</id>
                            <configuration>
                                <mainClass>xxxxxxxxxxx</mainClass>
                            </configuration>
                        </execution>
                   </executions>
</plugin>

1 Ответ

0 голосов
/ 20 апреля 2020

как упомянул khmarbaise «необходимо использовать ProcessBuilder.redirectError и ProcessBuilder.redirectOutput, и после этого вы можете читать из него ...», решение добавляет перенаправления.

...