2012-04-13 4 views
2

Ich habe diesen Code, der java -cp somejar.jar com.company.mainClass aufruft. Ich rufe es mit Process Builder an. In Windows funktioniert es gut. In Linux bekomme ich den FehlerStarten eines anderen Java-Prozesses von einem laufenden Java-Prozess zeigt Betriebssystemabhängiges Verhalten

Konnte Hauptklasse com.company.mainClass nicht finden oder laden. Hier

ist eine Probe von meinem Code:

ArrayList<String> args = new ArrayList<String>(); 
args.add(java); 
args.add("-cp"); 
args.add("../dep/jetty-distribution-8.1.1.v20120215/lib/*;../build/jar/somejar.jar"); 
//args.add("../build/jar/LRM.jar"); 
args.add("com.company.mainClass"); 
ProcessBuilder processBuilder = new ProcessBuilder(args); 
Process process = processBuilder.start(); 

Jeder weiß, warum ich ein anderes Verhalten in Windows im Vergleich zu Linux bekommen könnte?

+0

Es ist nie eine gute Idee, auf relative Pfade in Ihrem Code abhängen. Sie sollten diese Pfade vollständig qualifizieren und den Test erneut durchführen. – Perception

Antwort

2

Die Elemente in einem Klassenpfad (-cp) unter Linux müssen durch einen Doppelpunkt : und unter Windows durch ein Semikolon ; getrennt werden. Und im Windows-Pfad sind Trennzeichen Backslashes anstelle von Schrägstrichen. Erstellen Sie Ihren Klassenpfad mit File.separator, obwohl es auch mit Schrägstrichen funktionieren sollte.

+0

War gerade dabei, das zu schreiben, wollte aber sicherstellen, dass dies korrekt ist. Danke für den Kommentar. – morja

+0

Danke Jungs. Das hat das Problem gelöst. – user1332177

3

Sie verwenden ein Semikolon als Pfadtrennzeichen, während es unter Unix ein Doppelpunkt ist.

Verwenden File.pathSeparatorChar statt

+0

+1 für den File.pathSeparator. Früher habe ich System.getProperty ("path.separator") benutzt, was dasselbe tut, aber nicht so praktisch ist. – morja

Verwandte Themen