2011-10-14 24 views
14

Mi dilema es que tengo mis dudas con respecto a los archivos fuente generados en maven.Maven - cómo manejar clases generadas

Estoy intentando generar algunas clases a partir de WSDL y realmente no sé cuál es la forma estándar de manejar los archivos fuente resultantes.

  • ¿Dónde debería generar los archivos fuente .java? (Java src/main /, src/main/generó)
  • ¿Debo incluirlos bajo control de origen, o dejar que se generen después de la salida
  • Si yo no uso la carpeta src/main/java, ¿Cómo convencer a Eclipse automáticamente de "ver" esas clases como carpeta de origen?
  • ¿Realmente necesito los archivos .java, o solo los .class-es?

¿Cuáles son las mejores prácticas con respecto a este problema? Cualquier ayuda o consejo es apreciado.

Gracias por sus amables respuestas, Marcos

Respuesta

10

La mayoría de los Maven plugins que he encontrado que el código generar seguir una convención de colocar los archivos fuente de Java generados en un subdirectorio de la carpeta target/generated-sources. Por ejemplo, el Maven 2 JAXB 2.x Plugin genera las fuentes de Java en la carpeta target/generated-sources/xjc.

Siempre que la compilación sea repetible, no veo la necesidad de enviar las fuentes generadas a mi repositorio de código fuente. Por lo tanto, generalmente configuro mi Git, Mercurial, SVN o lo que sea que esté usando para ignorar todo lo que está debajo de target.

lo general editar manualmente el archivo .classpath para incluir la carpeta fuente para Eclipse y almacenar tanto los .classpath y .project archivos en el repositorio de código fuente.

Aquí se muestra un ejemplo:

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/> 
    <classpathentry kind="src" path="target/generated-sources/xjc"/> 
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/> 
    <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/> 
    <classpathentry kind="output" path="target/classes"/> 
</classpath> 

Es importante tener en cuenta que algunos Maven plugins no le dan las fuentes generados al POM. Puede usar el Build Helper Maven Plugin para vencer esto.

3

Nunca encontré una forma estándar de manejar los archivos fuente resultantes. Sin embargo, basado en mi experiencia yo le recomendaría lo siguiente:

  • Dónde debería generar los archivos de código fuente .java? (Src/main/java, src/main/generada)
  • los pongo bajo src/main/com/mypackage/generada. De esta manera, ya están en la ruta de clases y no necesitará ninguna otra configuración manual para tener la compilación de Eclipse sin errores.
  • ¿Debo incluirlos bajo control de origen, o dejar que se generan después de la salida
  • I acostumbrado a no incluirlos, pero después de algunos problemas (los desarrolladores no los generan porque se olvidó, falta el complemento IDE Maven, etc.) terminamos agregándolos al control de código fuente. Este ayudó a que alguien sepa que hay un paquete de fuentes generadas que no aparecían mágicamente, verifica rápidamente los cambios de los esquemas simplemente explorando una carpeta (algunos archivos fuente ya no existen, etc.) y ver el tamaño real de la aplicación .
  • Si yo no uso la carpeta/java src/main, ¿cómo convencer a Eclipse automáticamente a "ver" esas clases como carpeta de origen?
  • resolver utilizando src/main/com/mypackage/generado.
  • lo que realmente necesita los archivos .java, o sólo el .class-es?
  • sugeriría a utilizar los archivos .java.

Apenas mis dos centavos, después de años de usar JAXB, principalmente para la generación de WSDL a Java.

0

Esta es mi recomendación después de muchos años: Ponga toda su generación de código en un proyecto maven separado y dependa de él en sus proyectos normales que necesiten el código generado.

  • Hacer un mvn install para su código generado si es INSTANTÁNEA.
  • A menos que sepa lo que está haciendo no recomiendo poner el código generado en un submódulo de lo contrario Eclipse constantemente se confunden porque la mayoría de las personas importan todos los submódulos (proyecto es decir multimódulo)
  • Sin embargo Si decide hacer multimódulo (es decir, el código generado es un proyecto hermano) puede:
    • Específicamente no importar el proyecto a Eclipse y utilice mvn install en el proyecto individual
    • Confiar en los plugins de ciclo de vida M2e y construir ayudante del plugin (esto sólo funciona bien en cierta generación de código que es fuertemente apoyado).
  • Si necesita depurar el código generado, recomiendo unir las fuentes al contenedor con el complemento maven-attach-sources.

Si bien el enfoque multimódulo parece una buena idea en la práctica sólo se convierte en realidad volviendo loco molesto porque Eclipse va a salir de sincronización cada vez que tire si hay una nueva instantánea.

Si el código generado no se genera con tanta frecuencia, simplemente libérelo para que no sea SNAPSHOT (obviamente, esto requiere la instalación de un repositorio maven adecuado).

Cuestiones relacionadas