Pregunta

Estoy usando un proceso de regeneración de Java para muchos otros procesos Java utilizando Runtime.exec(cmd) donde cmd es como la siguiente:

java -cp "MyJar.jar" pkg.MyClass some-more-arguments

que ejecuta el mismo comando desde la línea de comandos bien funciona en Windows y Linux, sin embargo, cuando mi proceso de desove de Java llama al comando a través de Runtime.exec funciona en Windows pero no en Linux.

en Linux me sale Exception in thread "main" java.lang.NoClassDefFoundError: pkg/MyClass

alguna idea?

¿Fue útil?

Solución

Uso Runtime.exec (String []), no Runtime.exec (String)

Otros consejos

Este fragmento de código:

Process p = Runtime.getRuntime().exec("echo \"hello\"");
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
System.out.println(br.readLine());

da esta salida en Linux:

"hello"

por comillas ( ").

Así que mi sugerencia es para quitar las comillas ( ") desde la línea Exec. Ellos no se quitan cuando se ejecuta el comando, pero pasa al programa externo como argumentos. En realidad es equivalente a escribir java -cp \"MyJar.jar\" ... en el símbolo.

Si necesidad los "-marks (MyJar.jar quizá tiene espacios o algo así), le sugiero que busque en Runtime.exec(String command, String[] envp). Que incluso debe hacerlo más independiente de la plataforma.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top