2017-02-23 2 views
1

Ich habe eine App angestoßen, um zu versuchen, mit meinem Build-Prozess zu helfen und versuchte in einem git pull origin Befehl enthalten. Ich habe alle Arten von Methoden ausprobiert und getestet, aber es scheint nicht möglich zu sein, irgendeine Eingabe oder Ausgabe zu erhalten, um mit diesem Befehl zu arbeiten.Verwenden von ProcessBuilder zum Ausführen von Befehlen, die comand Line-Eingabe erfordern

Das Programm wartet auf Process.waitFor() ohne Eingabe oder Ausgabe.

Ich gehe davon aus, dass der git pull Befehl auf mich wartet, um einen Benutzernamen und ein Kennwort einzugeben, aber bis jetzt habe ich nicht festgestellt, wie man das erreicht.

Es gibt zahlreiche Fragen zu SO-Verkleidungen, diese Art von Beispielen, aber keine der Antworten scheint für meinen Anwendungsfall zu funktionieren.

Der einfachste Code, den ich glaube, sollte funktionieren ist:

class CmdTest { 
    public static void main(String[] args) throws Exception { 
     ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "git pull origin"); 
     pb.redirectErrorStream(true); 
     pb.redirectInput(ProcessBuilder.Redirect.INHERIT); 
     pb.redirectOutput(ProcessBuilder.Redirect.INHERIT); 

     Process process = pb.start(); 
     process.waitFor(); 
    } 
} 

die git pull origin mit einem dir Ersetzen ausgegeben liefern wie erwartet.

+0

Wenn Sie einen anderen Git-Befehl als 'git status' versuchen, erhalten Sie eine Ausgabe. Es ist zu wissen, ob der Befehl git korrekt zur Konsole hinzugefügt wurde. –

+0

@SergioLema Ja, 'git status' gibt die Ausgabe wie erwartet zurück. –

+0

Also, ich denke, das Problem bleibt in den Anmeldeinformationen. Versuchen Sie git so zu konfigurieren, dass Sie Ihr Konto verwenden (user.name und user.email in '.gitconfig') –

Antwort

0

Wenn nur git pull origin ohne die standardmäßig konfigurierten Anmeldeinformationen ausgeführt wird, wartet git auf sie bei jeder wichtigen Aktion. In Ihrem Code geben Sie keine Rückmeldung (git) an, sodass die Anwendung in diesem Stadium blockiert wird.

Konfigurieren Sie die Standardanmeldeinformationen für git in Ihre .gitconfig Datei, jeder git Befehl wird sie verwenden und die Konsole wird nicht fest (weder Ihre Anwendung).

+0

Dies ist ein Workaround und keine Lösung. Die 'redirectXxx'-Aufrufe sollten alle Eingaben, Ausgaben und Fehler an das Terminal umleiten und funktionieren für Prozesse, die keine Eingabe erfordern. –

Verwandte Themen