2011-05-18 23 views

Respuesta

2

utilizando el ProcessBuilder o Runtime.exec() puede ejecutar cualquier aplicación de línea de comandos desde el código Java

esto incluye el compilador javac y java como un proceso separado

+0

Cuando se ejecuta MyCompilingUtility.java, que calls'Runtime # exec() 'con un parámetro de' MyFile.java' javac donde 'MyFile.java' se ha creado a través de' 'PrintWriter' por MyCompilingUtility.java', I don 't ver un archivo 'clase' generado para' MyFile.java'. ¿Porque eso? –

+1

comprueba la salida de error de javac, javac espera que el directorio de trabajo sea el paquete raíz de la clase que está compilando –

+0

Gracias, @ratchet freak. Publicación del comentario de Sotirios Delimanolis para explicar su útil sugerencia: http://stackoverflow.com/questions/21580975/using-runtimeexec-with-javac-no-class-file/21581168?noredirect=1#comment32600305_21581168 –

5

Puede utilizar una instancia de JavaCompiler :

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 

Siga el enlace para ver un ejemplo sobre cómo usarlo.

+1

Tenga en cuenta que necesitará un JDK para que esto funcione. La instalación de JRE no incluye un compilador. –

+0

Buen punto Thorbjørn. Si elige esta alternativa, el requisito mínimo para su solicitud será ** JDK 6 **. – iruediger

+0

JRE 7 parece haber puesto javax.tools.ToolProvider en el rt.jar. Aunque no lo he probado, veo en 'jdk1.7.0_05/jre/lib/rt.jar': ' javax/tools/JavaCompiler.class' y 'javax/tools/ToolProvider.class' – karmakaze

Cuestiones relacionadas