2011-10-21 12 views
10

Tenemos un módulo experto que está configurado como tal:Maven - incluye todos los submódulos de un pom como dependencias en otro módulo

a (parent) 
    -> b (submodule) 
    -> c (submodule) 
    -> d (submodule) 

Esta lista de submódulos se espera que crezca conforme pasa el tiempo (a una lista de 20 más o menos). Tenemos otro módulo que incluirá como dependencias todos los submódulos de a. ¿Hay alguna manera de hacerlo, en lugar de tener que mantener manualmente la lista de submódulos sincronizada con la lista de dependencias? Es decir. ¿Hay alguna manera de incluir uno y todos los submódulos como una dependencia?

Respuesta

0

La única forma de que las dependencias se incluyan "automáticamente" es a través del mecanismo de dependencia transitiva, y solo funciona tirando dependencias de dependencias, así que a menos que tenga un pom que dependa de todos los submódulos, no, no lo hará obtenerlos sin enumerarlos todos. Una necesidad de hacer esto apunta a un defecto en el diseño de su proyecto. Si los módulos son "todos o ninguno", entonces probablemente no sean módulos separados.

3

usted tiene algunas opciones aquí:

  1. Sin cambios. Lista todas las dependencias en cada pom. Sin embargo, si tienen un padre común, puede usar dependencyManagement en el pom padre para establecer las versiones para las diferentes dependencias. En los poms de niños, no necesita enumerar la versión. Ver this section from Maven By Example. Una desventaja de este enfoque es que tiene que volver a enumerar las mismas dependencias una y otra vez.
  2. Crea un pom padre que enumera todas las dependencias compartidas. Vea un ejemplo here. Un inconveniente aquí es que está restringiendo todos los proyectos que quieren aprovechar esto para usar un proyecto principal cuando es posible que necesiten utilizar otro proyecto principal por algún motivo.
  3. Espere a Maven mixins, lo último que escuché fue still not ready.
  4. Repiense su diseño. ¿Tiene sentido que los proyectos dependan de tantos módulos e interfaces diferentes? Para reducir coupling, es posible que desee crear una interfaz que estos nuevos proyectos puedan usar. Varios proyectos de varios módulos de código abierto, como Apache Axis2, siguen este patrón. Un módulo contiene sus 20 dependencias y expone una interfaz a la que pueden llamar los nuevos módulos. Los nuevos módulos pueden listar ese único módulo principal como una dependencia y todas las 20 dependencias se incorporan como dependencias transitivas.

Creo que la opción # 4 es probablemente la correcta, pero no estoy lo suficientemente familiarizado con su situación.

+0

Tengo un problema similar. el acercamiento # 4 parece una buena opción. Sería útil si tiene/usted puede señalarme algún ejemplo para el enfoque # 4? –

1

Consideraciones de diseño aparte, esto se hace fácilmente: simplemente incluya <type>pom</type> en su dependencia apuntando a la matriz pom. E.g:

<dependency> 
    <groupId>my.group.id</groupId> 
    <artifactId>a</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <type>pom</type> 
</dependency> 
Cuestiones relacionadas