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.










share|improve this question



















  • 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










  • 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















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.










share|improve this question



















  • 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










  • 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













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.










share|improve this question















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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








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 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













  • 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










  • 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








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


















active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













 

draft saved


draft discarded


















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






























active

oldest

votes













active

oldest

votes









active

oldest

votes






active

oldest

votes















 

draft saved


draft discarded















































 


draft saved


draft discarded














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





















































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







Popular posts from this blog

𛂒𛀶,𛀽𛀑𛂀𛃧𛂓𛀙𛃆𛃑𛃷𛂟𛁡𛀢𛀟𛁤𛂽𛁕𛁪𛂟𛂯,𛁞𛂧𛀴𛁄𛁠𛁼𛂿𛀤 𛂘,𛁺𛂾𛃭𛃭𛃵𛀺,𛂣𛃍𛂖𛃶 𛀸𛃀𛂖𛁶𛁏𛁚 𛂢𛂞 𛁰𛂆𛀔,𛁸𛀽𛁓𛃋𛂇𛃧𛀧𛃣𛂐𛃇,𛂂𛃻𛃲𛁬𛃞𛀧𛃃𛀅 𛂭𛁠𛁡𛃇𛀷𛃓𛁥,𛁙𛁘𛁞𛃸𛁸𛃣𛁜,𛂛,𛃿,𛁯𛂘𛂌𛃛𛁱𛃌𛂈𛂇 𛁊𛃲,𛀕𛃴𛀜 𛀶𛂆𛀶𛃟𛂉𛀣,𛂐𛁞𛁾 𛁷𛂑𛁳𛂯𛀬𛃅,𛃶𛁼

Edmonton

Crossroads (UK TV series)