Generación dinámica de clases java desde un programa java

En el momento de la compilación (compilación) de mi proyecto, necesito generar código para una clase java. La clase java generada es una clase de bean Java con un conjunto de captadores y definidores. En el momento de la compilación, obtengo el nombre de la clase y los nombres de las variables. Entonces, lo que tengo que hacer es generar dinámicamente el bean Java a partir de la información que tengo.

p.ej. En el momento de la compilación, obtengo los siguientes datos.

class-name=Test
variable-name=aaa

Entonces, la clase generate debería verse como la siguiente.

public class Test {
   public String aaa;
   public void setVar(String str) {
      this.aaa = str; 
   }
   public String getVar(){
      return this.aaa;
   }
}

Cuando busqué una herramienta que pueda usar, encontré Arch4j [1] interesante, pero el problema es que no es compatible con la licencia de Apache 2.0. Estoy buscando un proyecto / herramienta que sea compatible con la licencia Apache 2.0.

Agradecería que alguien me diera una idea de cómo puedo hacer esto.

[diez] - http://arch4j.sourceforge.net/components/generator/index.html

preguntado el 27 de agosto de 11 a las 18:08

Estás omitiendo mucha información ... :-) Por ejemplo, ¿estás hablando de beans de datos simples o tienes alguna acción personalizada como parte del setter y getter? ¿Qué tipo de sistema de compilación está implementando, por ejemplo, Maven o necesita implementar? javac ¿directamente? -

Por favor, eche un vistazo a la pregunta ya formulada [java-code-generation] [1] [1]: stackoverflow.com/questions/6973580/java-code-generation -

4 Respuestas

¿Por qué no simplemente generar el archivo .java durante su compilación, utilizando una tarea de hormiga personalizada o un complemento de Maven? Esto parece una tarea bastante fácil que no necesita ninguna biblioteca compleja. Incluso podría usar un archivo de plantilla con marcadores de posición para el nombre de la clase y el nombre del campo, y generar el archivo .java real usando un replace tarea.

Respondido 27 ago 11, 22:08

Eche un vistazo al paquete javax.tools. Puede crear y cargar una clase generada dinámicamente solo con ese paquete.

Solo tenga en cuenta que necesita el JDK disponible y que no es redistribuible, por lo que su cliente debería descargarlo por separado (como lo hace en cualquier IDE hoy)

http://download.oracle.com/javase/6/docs/api/javax/tools/package-summary.html

Por ejemplo, puede invocar el compilador de Java mediante programación con:

http://download.oracle.com/javase/6/docs/api/javax/tools/JavaCompiler.html

Y puedes cargarlo con URLClassLoader

Respondido 27 ago 11, 22:08

Sugerencia extraña, pero parece que desea generar beans. ¿Por qué no usar algo como DynaBean de apache common? Le permiten crear beans en tiempo de ejecución. Aquí hay un ejemplo de uso de DynaBean.

Por supuesto, esto es en tiempo de ejecución y no en tiempo de compilación. Para el tiempo de compilación, recomendaría usar una tarea de hormiga para compilar su fuente y agregar una dependencia para compilar en la generación de sus clases. Puede manejar la generación de clases escribiendo una pequeña aplicación java que usa velocidad como motor de la plantilla de clase Java.

Entonces, su tarea ant en la compilación primero llama a un pequeño programa java que genera los archivos de clase java usando la plantilla de velocidad (elimine los archivos antiguos en ant si es necesario). Luego compila como de costumbre.

Respondido 27 ago 11, 22:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.