pom perfil example ejemplo dependencias dependencia crear con compilar inheritance maven parent aggregation pom.xml

inheritance - perfil - maven y dependencias



Arquitectura de ejemplo de herencia y agregación de Maven (1)

Tu enfoque es sensato. Un par de puntos:

Nivel organizativo POM

Sí a la configuración del entorno y a la información general del proyecto, no a las dependencias.

Los proyectos deben enumerar explícitamente todas sus dependencias y no confiar en heredarlas (en mi humilde opinión). Significa que debe declarar su registrador varias veces, pero le ahorrará dolor más adelante. (Por supuesto, puede usar un proyecto POM separado para agrupar dependencias que están relacionadas y, por lo tanto, generalmente se especifican juntas, como el ejemplo de hibernación en su enlace). Si desea centralizar las versiones de las dependencias, puede colocar una sección de gestión de dependencyManagement en el POM principal, lo que significa que todavía declara la dependencia en el proyecto secundario, pero la versión proviene del padre, lo que garantiza la coherencia. Los niños que no declaran la dependencia no terminan con eso.

Tener una webapp-parent es una buena idea si tienen complementos duplicados, configuración, etc. Si comparten código , puedes agregar otro webapp de proyecto común que está construido como un jar en el que los otros dos pueden depender. Sus dependencias se incluirán transitoriamente, por lo que es un lugar natural para las dependencias comunes.

Agregación

webapp-parent no necesita ser padre ni agregador, a menos que necesites crear con frecuencia webapp1 y webapp2 pero no project-api al mismo tiempo. Puedes simplemente poner todos los proyectos como módulos del padre general. Su estructura de directorio podría verse como

overall project-api webapp-parent webapp1 webapp2

o si prefiere su sugerencia original, que también está bien

overall project-api webapp-parent webapp1 webapp2

Es más importante estar atento al diseño del proyecto a lo largo del tiempo y refactorizar cuando corresponda.

Orden de construcción

Maven es lo suficientemente inteligente como para construir los módulos en el orden correcto, siempre y cuando declare las dependencias.

Tengo una pregunta sobre la mejor forma de reestructurar una cantidad de proyectos Maven individuales usando una combinación de herencia y agregación.

Preparando la escena:

  • Hay 3 proyectos Maven existentes basados ​​en el código, todos desarrollados por el mismo equipo.
  • 1 proyecto es una API, permite llamar es project-api.
  • Los otros 2 proyectos son aplicaciones web que utilizan el proyecto-api. Vamos a llamarlos web-app1 y web-app2.

Los tres proyectos tienen un par de dependencias básicas como log4j y junit en común. Aparte de eso, web-app1 y web-app2 dependen de project-api y también comparten una cantidad de dependencias comunes adicionales entre ellos.

He estado leyendo http://www.sonatype.com/books/mvnref-book/reference/pom-relationships-sect-pom-best-practice.html , solo quiero confirmar que entiendo las mejores prácticas.

Herencia:

¿Tendría sentido para mí crear un POM padre a nivel organizacional que incluya las dependencias (gestión de dependencias) que son comunes a los tres proyectos y algunas configuraciones de entorno e información general del proyecto. La intención es que todos los proyectos de Maven (no necesariamente directamente) hereden de este POM.

¿Tendría sentido para mí crear otro POM padre que incluya las dependencias (administración de dependencias) que son comunes a web-app1 y web-app2 y solo tienen web-app1 y web-app2 heredadas de este POM. Creo que este POM (vamos a llamarlo POM padre de la aplicación web) debe ser un POM secundario del POM padre del nivel organizacional.

Agregación:

En términos de agregación, no quiero crear un solo artefacto al final del día. Por el contrario, quiero ejecutar un comando de compilación Maven (probablemente en el nivel organizativo de POM) para compilar los tres proyectos en este orden:

  1. proyecto-api
  2. web-app1
  3. web-app2

¿Significa esto que el padre organizacional POM declararía módulos?

  1. proyecto-api
  2. web-app padre POM

Y el POM padre de la aplicación web declararía módulos:

  1. web-app1
  2. web-app2

Tenga en cuenta que el POM principal de la aplicación web y el POM padre de la organización no tienen ningún código relacionado. Creo que esto está bien, apuntando "De hecho, en el mundo de Maven, un proyecto no necesita contener ningún código, simplemente un pom.xml". tomado de http://maven.apache.org/pom.html .

Finalmente, ¿cómo me aseguro de que se respete el orden de compilación que necesito? Por ejemplo, la creación del POM organizativo principal daría como resultado que se construyera el api de proyecto y esta última compilación se utilizara en la construcción de web-app1 y web-app2?

Espero que esto no sea demasiado confuso, feliz de aclarar si se requiere más información. ¡Siéntete libre de decirme si tengo esto completamente mal! Gracias.