ProcessBuilder: process doesn't finish without “redirectOutput”
up vote
0
down vote
favorite
I'm automating a gradle build using Java. I execute "gradlew.bat" in a Process created from a ProcessBuilder. Here's the code:
ProcessBuilder gradlewProcessBuilder = new ProcessBuilder(mainDirPath.concat("\android\gradlew.bat"), "assembleDebug");
gradlewProcessBuilder.directory(new File(mainDirPath.concat("/android")));
gradlewProcessBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT); //This is the line
Process gradlewProcess = gradlewProcessBuilder.start();
gradlewProcess.waitFor();
Now this code works flawlessly, but it outputs the gradle console through the application console and I don't want that. If I delete this line:
gradlewProcessBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
The process hangs in waitFor() indefinitely.
I have absolutely no idea how could redirectOutput have effect over this, any light you can shed is welcome.
java java-8 process processbuilder
add a comment |
up vote
0
down vote
favorite
I'm automating a gradle build using Java. I execute "gradlew.bat" in a Process created from a ProcessBuilder. Here's the code:
ProcessBuilder gradlewProcessBuilder = new ProcessBuilder(mainDirPath.concat("\android\gradlew.bat"), "assembleDebug");
gradlewProcessBuilder.directory(new File(mainDirPath.concat("/android")));
gradlewProcessBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT); //This is the line
Process gradlewProcess = gradlewProcessBuilder.start();
gradlewProcess.waitFor();
Now this code works flawlessly, but it outputs the gradle console through the application console and I don't want that. If I delete this line:
gradlewProcessBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
The process hangs in waitFor() indefinitely.
I have absolutely no idea how could redirectOutput have effect over this, any light you can shed is welcome.
java java-8 process processbuilder
1
If not redirecting the output, how is the output handled? See also When Runtime.exec() won't for many good tips on creating and handling a process correctly. Then ignore it refers toexec
and use aProcessBuilder
to create the process. Also break aString arg
intoString args
to account for things like paths containing space characters.
– Andrew Thompson
Nov 9 at 2:58
When you don’t redirect the output, you must read it. If you don’t, where’s the problem? Just redirect it. But you can do the whole thing as simple asnew ProcessBuilder(mainDirPath + "\android\gradlew.bat", "assembleDebug") .directory(new File(mainDirPath + "/android")) .inheritIO() .start() .waitFor()
– Holger
Nov 9 at 7:51
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I'm automating a gradle build using Java. I execute "gradlew.bat" in a Process created from a ProcessBuilder. Here's the code:
ProcessBuilder gradlewProcessBuilder = new ProcessBuilder(mainDirPath.concat("\android\gradlew.bat"), "assembleDebug");
gradlewProcessBuilder.directory(new File(mainDirPath.concat("/android")));
gradlewProcessBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT); //This is the line
Process gradlewProcess = gradlewProcessBuilder.start();
gradlewProcess.waitFor();
Now this code works flawlessly, but it outputs the gradle console through the application console and I don't want that. If I delete this line:
gradlewProcessBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
The process hangs in waitFor() indefinitely.
I have absolutely no idea how could redirectOutput have effect over this, any light you can shed is welcome.
java java-8 process processbuilder
I'm automating a gradle build using Java. I execute "gradlew.bat" in a Process created from a ProcessBuilder. Here's the code:
ProcessBuilder gradlewProcessBuilder = new ProcessBuilder(mainDirPath.concat("\android\gradlew.bat"), "assembleDebug");
gradlewProcessBuilder.directory(new File(mainDirPath.concat("/android")));
gradlewProcessBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT); //This is the line
Process gradlewProcess = gradlewProcessBuilder.start();
gradlewProcess.waitFor();
Now this code works flawlessly, but it outputs the gradle console through the application console and I don't want that. If I delete this line:
gradlewProcessBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
The process hangs in waitFor() indefinitely.
I have absolutely no idea how could redirectOutput have effect over this, any light you can shed is welcome.
java java-8 process processbuilder
java java-8 process processbuilder
edited Nov 8 at 20:24
asked Nov 8 at 19:55
Milanesa-chan
213
213
1
If not redirecting the output, how is the output handled? See also When Runtime.exec() won't for many good tips on creating and handling a process correctly. Then ignore it refers toexec
and use aProcessBuilder
to create the process. Also break aString arg
intoString args
to account for things like paths containing space characters.
– Andrew Thompson
Nov 9 at 2:58
When you don’t redirect the output, you must read it. If you don’t, where’s the problem? Just redirect it. But you can do the whole thing as simple asnew ProcessBuilder(mainDirPath + "\android\gradlew.bat", "assembleDebug") .directory(new File(mainDirPath + "/android")) .inheritIO() .start() .waitFor()
– Holger
Nov 9 at 7:51
add a comment |
1
If not redirecting the output, how is the output handled? See also When Runtime.exec() won't for many good tips on creating and handling a process correctly. Then ignore it refers toexec
and use aProcessBuilder
to create the process. Also break aString arg
intoString args
to account for things like paths containing space characters.
– Andrew Thompson
Nov 9 at 2:58
When you don’t redirect the output, you must read it. If you don’t, where’s the problem? Just redirect it. But you can do the whole thing as simple asnew ProcessBuilder(mainDirPath + "\android\gradlew.bat", "assembleDebug") .directory(new File(mainDirPath + "/android")) .inheritIO() .start() .waitFor()
– Holger
Nov 9 at 7:51
1
1
If not redirecting the output, how is the output handled? See also When Runtime.exec() won't for many good tips on creating and handling a process correctly. Then ignore it refers to
exec
and use a ProcessBuilder
to create the process. Also break a String arg
into String args
to account for things like paths containing space characters.– Andrew Thompson
Nov 9 at 2:58
If not redirecting the output, how is the output handled? See also When Runtime.exec() won't for many good tips on creating and handling a process correctly. Then ignore it refers to
exec
and use a ProcessBuilder
to create the process. Also break a String arg
into String args
to account for things like paths containing space characters.– Andrew Thompson
Nov 9 at 2:58
When you don’t redirect the output, you must read it. If you don’t, where’s the problem? Just redirect it. But you can do the whole thing as simple as
new ProcessBuilder(mainDirPath + "\android\gradlew.bat", "assembleDebug") .directory(new File(mainDirPath + "/android")) .inheritIO() .start() .waitFor()
– Holger
Nov 9 at 7:51
When you don’t redirect the output, you must read it. If you don’t, where’s the problem? Just redirect it. But you can do the whole thing as simple as
new ProcessBuilder(mainDirPath + "\android\gradlew.bat", "assembleDebug") .directory(new File(mainDirPath + "/android")) .inheritIO() .start() .waitFor()
– Holger
Nov 9 at 7:51
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53215216%2fprocessbuilder-process-doesnt-finish-without-redirectoutput%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
If not redirecting the output, how is the output handled? See also When Runtime.exec() won't for many good tips on creating and handling a process correctly. Then ignore it refers to
exec
and use aProcessBuilder
to create the process. Also break aString arg
intoString args
to account for things like paths containing space characters.– Andrew Thompson
Nov 9 at 2:58
When you don’t redirect the output, you must read it. If you don’t, where’s the problem? Just redirect it. But you can do the whole thing as simple as
new ProcessBuilder(mainDirPath + "\android\gradlew.bat", "assembleDebug") .directory(new File(mainDirPath + "/android")) .inheritIO() .start() .waitFor()
– Holger
Nov 9 at 7:51