Process/Subversion funktioniert unter eclipse aber nicht als Jar

bseidel

Grünschnabel
Hallo zusammen,

ich habe ein Problem worauf ich nach Stundenlanger Suche keine Lösung gefunden habe. Und zwar will ich per ProcessBuilder auf meinen Subversion-Server zugreifen und eine Repository auschecken. Wenn ich das Programm über eclipse starte funktioniert es Einwandfrei! Aber wenn ich es als jar laufen lasse Funktioniert es nicht!
Ich lasse mir den Stream auf der Konsole ausgeben und dort ist dann ein leerer Prompt für ein paar Sekunden (als ob er die Daten holen würde) und macht dann mit den restlichen Programmcode einfach normal weiter.
Ich habe das gleiche auch mal mit einem Update ausgeführt dort bekomme ich wenigstens noch ein > Updates 'projekt' (Ist gerade aus dem Gedächnis), aber ansonsten das gleiche, ein paar Sekunden tut sich nicht und dann wird ganz normal weitergefahren.

Code:
ArrayList<String> list = new ArrayList<String>();
list.add( "\"c:\\Programme\Turtoise\bin\svn.exe\"" );
list.add( "co" );
list.add( "\"https://192.168.10.250/svn/project\"" );
list.add( "\"c:\\work\"" );
list.add( "--username=user" );
list.add( "--password=passwd" );
list.add( "--no-auth-cache" );

ProcessBuilder pb = new ProcessBuilder( list );
Process p = pb.start();

An dieser Stelle noch eimal als Hinweis "Das Programm funktioniert mit eclipse Einwandfrei!"

Kann mir jemand diese Phänomen erklären? Und Helfen?


Gruß Björn
 
Hi.

Da subversion jede Menge ausgaben auf die Standardausgabe schreibt, müsstest du diese auslesen, sonst blockiert das Programm bei der Ausgabe (und bricht dann vermutlich ab weil ein Timeout vom Subversion-Server kommt). Das gleiche gilt für die Standarderrorausgabe, wobei du diese auch zusammenlegen kannst.

Das es unter Eclipse funktioniert liegt vermutlich einfach daran, das es keine (blockierende) Konsole unter Eclipse gibt.

Und eigentlich machst du es auch zu kompliziert, da der Prozessbuilder bereits die Argumente korrekt zitieren sollte und du auch direkt die Argumente angeben kannst:
Java:
ProcessBuilder pb = new ProcessBuilder("c:\\Programme\\Turtoise\\bin\\svn.exe",
  "co",
  "https://192.168.10.250/svn/project",
  "c:\\work",
  "--username=user",
  "--password=passwd",
  "--no-auth-cache");

pb.redirectErrorStream(true); // stdout und stderr zusammenlegen
Process p = pb.start();
InputStream errout = p.getInputStream();
while (errout.read() != -1) ;
 
Hallo deepthroat,

danke für deine Hilfe/Unterstützung aber ich bin gerade mit einem Kollegen selbst auf die Lösung gekommen. Der Subversion-Server nutzt eine SSL-Verschlüsselung und dem Admin-Benutzerkonto fehlten dafür die Dateien (unter appdata/Roaming/subversion). Schnell die beiden Dateien kopiert und nun Funktioniert es einwandfrei.

Und eigentlich machst du es auch zu kompliziert, da der Prozessbuilder bereits die Argumente korrekt zitieren sollte und du auch direkt die Argumente angeben kannst:
Ich mache das extra mit der ArrayListe da ich z.B. zwischen Checkout und Update switchen kann.


Gruß Björn
 

Neue Beiträge

Zurück