Pregunta

¿Hay alguna manera en el uso de código fuente almacenado externamente y cargarlo en un programm de Java, de modo que pueda ser utilizado por él?

Me gustaría tener un programa que puede ser alterado sin editar el código fuente completo y que esto es posible incluso sin compilar esto cada vez. Otra ventaja es que puedo cambiar partes del código como yo quiero.

Por supuesto que tiene que tener interfaces de modo que es posible enviar datos en esto y conseguir de nuevo en el programa fuente fija de nuevo.

Y, por supuesto, debe ser más rápido que un sistema de interpretación pura.

Entonces, ¿hay una manera de hacer esto como una compilación adicional de estas partes de código fuente externa y un comienzo de la Programm después de esto se hace?

Gracias de antemano, Andreas:)

¿Fue útil?

Solución

Es necesario el javax.tools API para esto. Por lo tanto, es necesario tener al menos el JDK instalado para conseguir que funcione (y dejar que su punto de IDE a ella en lugar de la JRE). Aquí hay un ejemplo básico patada de salida (sin excepción adecuada y la codificación de manejo sólo para hacer el ejemplo básico menos opaco, tos ):

public static void main(String... args) throws Exception {
    String source = "public class Test { static { System.out.println(\"test\"); } }";

    File root = new File("/test");
    File sourceFile = new File(root, "Test.java");
    Writer writer = new FileWriter(sourceFile);
    writer.write(source);
    writer.close();

    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    compiler.run(null, null, null, sourceFile.getPath());

    URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { root.toURI().toURL() });
    Class<?> cls = Class.forName("Test", true, classLoader);
}

Esto debería imprimir test en la salida estándar, como se ha hecho por el inicializador estático en el código fuente de prueba. El uso adicional sería más fácil si esas clases implemente una interfaz determinada, que ya está en la ruta de clase. De lo contrario se necesita involucrar a la Reflexión API para el acceso y la invocación de los métodos / campos.

Otros consejos

En Java 6 o posterior, usted puede tener acceso al compilador a través del paquete javax.tools. ToolProvider.getSystemJavaCompiler () le conseguirá una javax.tools .JavaCompiler , que se puede configurar para compilar las fuentes. Si está utilizando versiones anteriores de Java, todavía se puede llegar a ella a través de la interfaz de com.sun.tools.javac.Main interno, aunque es mucho menos flexible.

java6 tiene una API de secuencias de comandos. Lo he utilizado con Javascript, pero creo que se puede tener compilar código Java externo.

http://java.sun.com/developer/technicalArticles/ J2SE / escritorio / scripts /

Edit: Aquí hay un enlace más relevantes: código "fuente dinámica" en las aplicaciones Java

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