Bitte Hilfe, Probleme mit ProcessBuilding unter Linux

Andron

Erfahrenes Mitglied
Hallo,
ich kann schon seit mehreren Tagen das Problem nicht lösen und komme bei meiner Arbeit nicht voran. Das Programm soll über die Shell ein Junit-Test starten. Dabei werden einige Parameter übergeben, z.B. Klassenname, Package, Jar-File.
Hier ist der Code:
Code:
StringBuffer cmdLine=new StringBuffer();
String jarfile = taskName;
String path = args[1];
String classname = args[2];
logger.debug("[BasicExecutor] execForJunit - jarfile: "+ jarfile);
logger.debug("[BasicExecutor] execForJunit - Ausführung in: "+ path);
logger.debug("[BasicExecutor] execForJunit - classname: "+ classname);
String onlyClassName=null;
onlyClassName=classname.substring(0, classname.lastIndexOf(".class"));
logger.debug("[BasicExecutor] execForJunit - onlyClassName: "+ onlyClassName);
StringBuffer buffer=new StringBuffer();
String command = null;
String commandpath = null;
ProcessBuilder builder = null;
if(os.equals("linux"))
{
	commandpath = path+"/";
	if(jarfile!=null)
	{
		 cmdLine.append("java -cp "+commandpath+"junit.jar:"+commandpath+jarfile+" junit.textui.TestRunner ");
		cmdLine.append(onlyClassName);
	}
	else
	{
		cmdLine.append("sh java junit.textui.TestRunner ");
		cmdLine.append(onlyClassName);
	}		
	command = cmdLine.toString();			
	logger.debug("[BasicExecutor] execForJunit - Kommando: "+ command + " Pfad: " + commandpath);
	builder = new ProcessBuilder(command);
	builder.directory( new File(commandpath ));		
}
if(os.equals("windows"))
{
	if(jarfile!=null)
	{
		cmdLine.append("java -cp .;junit.jar;"+jarfile+" junit.textui.TestRunner ");
		cmdLine.append(onlyClassName);
	}
	else
	{
		cmdLine.append("java -cp .;junit.jar junit.textui.TestRunner ");
		cmdLine.append(onlyClassName);
	}
			
	command = "cmd";
	commandpath= "/c";		
	logger.debug("[BasicExecutor] execForJunit - Kommando: "+ command + " Pfad: " + commandpath);
			
	builder = new ProcessBuilder(command, commandpath, cmdLine.toString());
	builder.directory( new File(path) );
}	
System.err.println("--->"+cmdLine.toString());
//String command = "cmd /c "+cmdLine.toString();
logger.debug("[BasicExecutor] execForJunit - Kommando gestartet: "+ cmdLine.toString());
Process p = null;
try
{
	p = builder.start();

Wenn ich das Programm unter Windows ausführe, läuft alles. Unter Linux läuft nicht.

Hier ist die Loggin-Ausgabe von Windows:
Prozess wurde gestartet mit Jarfile: tst.jar
execute junit command: meinpackage.VerySimpleTest.class
execForJunit - jarfile: tst.jar
execForJunit - path: C:\Temp
execForJunit - classname: meinpackage.VerySimpleTest.class
execForJunit - onlyClassName: meinpackage.VerySimpleTest
execForJunit - Kommando: cmd Pfad: /c
execForJunit - Kommando gestartet: java -cp .;junit.jar;tst.jar junit.textui.TestRunner meinpackage.VerySimpleTest
executed: junit tst.jar

Und hier die von Linux inkl. der Fehlermeldung:
Prozess wurde gestartet... 1169550960343
Prozess wurde gestartet mit Jarfile: tst.jar
execute junit command: meinpackage.VerySimpleTest.class
execForJunit - jarfile: tst.jar
execForJunit - Ausführung in: /home/tomcat/test/webapps/xmlwrapper/testdir
execForJunit - classname: meinpackage.VerySimpleTest.class
execForJunit - onlyClassName: meinpackage.VerySimpleTest
execForJunit - Kommando: java -cp /home/tomcat/test/webapps/xmlwrapper/testdir/junit.jar:/home/tomcat/test/webapps/xmlwrapper/testdir/tst.jar junit.textui.TestRunner meinpackage.VerySimpleTest Pfad: /home/tomcat/test/webapps/xmlwrapper/testdir/
execForJunit - Kommando gestartet: java -cp /home/tomcat/test/webapps/xmlwrapper/testdir/junit.jar:/home/tomcat/test/webapps/xmlwrapper/testdir/tst.jar junit.textui.TestRunner meinpackage.VerySimpleTest
java.io.IOException: Cannot run program "java -cp /home/tomcat/test/webapps/xmlwrapper/testdir/junit.jar:/home/tomcat/test/webapps/xmlwrapper/testdir/tst.jar junit.textui.TestRunner meinpackage.VerySimpleTest": java.io.IOException: error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
at com.is_teledata.executor.BasicExecutor.execForJunit(BasicExecutor.java:223)
at com.is_teledata.executor.BasicExecutor.execute(BasicExecutor.java:260)
at com.is_teledata.wrapper.generalwrapper.GeneralTask.run(GeneralTask.java:82)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.<init>(UNIXProcess.java:148)
at java.lang.ProcessImpl.start(ProcessImpl.java:65)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
... 5 more


Alle Pfade sind korrekt und die Dateien existieren auch.
Bitte um Hilfe.
Habe schon überall geschaut, keine Lösung gefunden.
Danke


EDIT: habe was vergessen. Wenn ich die Zeile "java -cp /home/tomcat/test/webapps/xmlwrapper/testdir/junit.jar:/home/tomcat/test/webapps/xmlwrapper/testdir/tst.jar junit.textui.TestRunner meinpackage.VerySimpleTest" einfach über die Shell starte, geht alles.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück