eclipse - plugin - maven wsimport local wsdl file
Maven: cómo manejar las clases generadas (3)
La mayoría de los plugins de Maven con los que he encontrado código siguen una convención de colocar los archivos fuente Java generados en un subdirectorio de la carpeta target/generated-sources
. Por ejemplo, el complemento Maven 2 JAXB 2.x genera las fuentes Java en la carpeta target/generated-sources/xjc
.
Siempre que la construcción sea repetible, no veo la necesidad de comprometer las fuentes generadas con mi repositorio de código fuente. Así que generalmente configuro mi Git , Mercurial , SVN o lo que sea que esté usando para ignorar todo lo que está debajo del target
.
Normalmente edito manualmente el archivo .classpath
para incluir la carpeta de origen para Eclipse y .project
archivos .classpath
y .project
en el repositorio de código fuente.
Aquí hay 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 complementos Maven no unen las fuentes generadas al POM. Puedes utilizar el complemento Build Helper Maven para superar esto.
Mi dilema es que tengo mis dudas con respecto a los archivos fuente generados en maven.
Intento 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? (src / main / java, src / main / generado)
- ¿Debo incluirlos bajo el control de la fuente o dejarlos generados después de la salida?
- Si no uso la carpeta src / main / java, ¿cómo convencer a Eclipse de que "vea" automáticamente esas clases como carpeta de origen?
- ¿Realmente necesito los archivos .java, o solo las .class-es?
¿Cuáles son las mejores prácticas con respecto a este tema? Cualquier ayuda o consejo es apreciado.
Gracias por sus amables respuestas, Mark
Nunca encontré una forma estándar de manejar los archivos fuente resultantes. Sin embargo, según mi experiencia, te recomendaría lo siguiente:
- ¿Dónde debería generar los archivos fuente .java? (src / main / java, src / main / generado)
- Los puse bajo src / main / com / mypackage / generated. De esta forma, ya están en la ruta de clases y no necesitará ninguna otra configuración manual para que Eclipse compile sin errores.
- ¿Debo incluirlos bajo el control de la fuente o dejarlos generados después de la salida?
- Solía NO incluirlos , pero después de algunos problemas (los desarrolladores no los generan porque se olvidaron, la falta del complemento IDE Maven, etc.) , los agregamos al control de código fuente . Esto ayudó a que alguien sepa que hay un paquete de fuentes generadas que no apareció 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 no uso la carpeta src / main / java, ¿cómo convencer a Eclipse de que "vea" automáticamente esas clases como carpeta de origen?
- Resuelto mediante el uso de src / main / com / mypackage / generated.
- ¿Realmente necesito los archivos .java, o solo las .class-es?
- Sugeriría usar los archivos .java.
Solo mis dos centavos, después de años de usar JAXB, principalmente para la generación de WSDL a Java.
Esta es mi recomendación después de muchos años: Pon toda tu generación de código en un proyecto maven separado y depende de ello en tus proyectos normales que necesitan el código generado.
- Haga una
mvn install
para su código generado si es SNAPSHOT. - A menos que sepa lo que está haciendo, no recomiendo colocar el código generado en un submódulo; de lo contrario, Eclipse se confundirá constantemente porque la mayoría de las personas importa todos los submódulos (es decir, el proyecto multimodular).
- Sin embargo, si decides hacer un multímetro (es decir, el código generado es un proyecto hermano), puedes:
- Específicamente, no importe el proyecto en Eclipse y use
mvn install
en el proyecto individual - Confíe en los complementos de ciclo de vida m2e y en el complemento Build Helper (esto solo funciona bien en la generación de ciertos códigos que es muy compatible).
- Específicamente, no importe el proyecto en Eclipse y use
- Si necesita depurar el código generado, recomiendo unir fuentes al contenedor con el complemento maven-attach-sources .
Si bien el enfoque multimodular parece ser una buena idea en la práctica, simplemente se vuelve realmente molesto porque Eclipse se desincronizará cada vez que lo hagas si hay un nuevo SNAPSHOT.
Si el código generado no se genera con tanta frecuencia, simplemente libérelo para que no sea una INSTANTÁNEA (obviamente, esto requiere la instalación de un repositorio Maven adecuado).