2011-06-08 37 views
9

En un gran proyecto Maven 2, es bueno contar con la administración de dependencias para asegurarse de que solo se utilice una versión de una dependencia en todo el sistema. Eso hace que el sistema sea consistente.Limpiar la administración de dependencias de Maven

Pero cuando genero POM efectivos no tengo oportunidad de ver de dónde provienen las versiones de dependencia. Del mismo modo, en un POM en la parte superior de la jerarquía, no tengo idea de dónde en las POM secundarias se usan realmente las versiones definidas de la sección de gestión de dependencias.

Entonces, ¿cómo puedo mantener limpia la administración de la dependencia? Cuando elimino una dependencia en un proyecto, siempre controlo en todos los demás proyectos si todavía es necesario, de modo que también puedo eliminarlo de la administración de dependencias en la parte superior.

Además, ¿cómo creo la gestión de la dependencia, asegurándome de que no esté duplicada en algún lugar de los POM secundarios? Cuando agrego dependencias, siempre reviso todos los demás proyectos para ver si es posible agregarlos en la parte superior de la administración de dependencias. ¿O simplemente moverías todas las versiones de dependencia a la parte superior desde el principio para que estén siempre en un solo lugar?

Gracias por cualquier idea.

+0

Otra idea acabo de tener: por qué no usar el mismo número de versión a través de todos los módulos, y se basan en $ {} project.version la mayor frecuencia posible. Lo ideal es que solo tenga el número de versión en el POM superior y use la variable en cualquier otro lugar. Al igual que no necesito ninguna gestión de dependencia, todas las versiones de dependencia interna se especifican directamente con la variable. – anselm

Respuesta

2

Si está utilizando eclipse, el complemento m2eclipe le permite ver la Jerarquía de dependencias para usted pom. Esto puede ser muy útil al tratar de determinar dónde se introducen las dependencias en su proyecto y dónde ocurren los conflictos.

1

Debe declarar explícitamente las dependencias en los proyectos en los que se utilizan, a menos que se utilice en TODOS los proyectos. Si, por ejemplo, se usa Spring para todos sus proyectos, entonces colóquelo en el POM principal. Si solo se utiliza en algunos proyectos, declare en cada uno y ponga una propiedad spring.version en el padre que cada pom hijo pueda usar para su versión.

Mover todas las dependencias al padre elimina la responsabilidad de cada proyecto para administrar sus propias dependencias. Considero que esto es un mal uso de maven, ya que hace las cosas más difíciles de mantener en lugar de más fáciles. Ahora agrega dependencias a proyectos que no los necesitan. A menudo, el alcance de una dependencia también es diferente para los proyectos, y no se puede gestionar a menos que declare sus dependencias localmente.

+0

No veo la diferencia entre especificar la versión en la administración de dependencias o en una propiedad. No mover las dependencias a la administración de dependencia principal tiene la desventaja de extender el número de versión en todos sus POM, lo que resulta fácilmente en tener múltiples versiones de una dependencia en toda la aplicación. – anselm

+0

Es por eso que usa una propiedad. Entonces sus dependencias se administran localmente al proyecto, pero la propiedad define la versión aceptada para usar. La única advertencia es que cualquier persona que agregue un pom hijo debe ser consciente de la existencia de esas propiedades y usarlas apropiadamente. Esto es aún más preferible a su propuesta, que es básicamente dar a cada proyecto todas las dependencias las dependencias de cada otro proyecto. También te obliga a abarcarlos a todos como compilación. – Robin

8

Puede crear uno o más boms (lista de materiales) para su proyecto. Estos pom.xml declararán todas las dependencias utilizadas en su proyecto dentro de la sección dependencyManagement.

En cada pom hijo, importaría estos boms y usaría las dependencias que se requieren para el proyecto.

De esta manera, las versiones de dependencia se administran centralmente, mientras que, al mismo tiempo, cada pom hijo usa solo las dependencias que necesita.

Ver Importing Managed Dependencies

proyecto de lista de materiales

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>my.group</groupId> 
    <artifactId>My-Project-Bom</artifactId> 
    <version>1.0</version> 
    <packaging>pom</packaging> 
    <dependencyManagement> 
    <dependencies> 
     <dependency> 
     <groupId>commons-beanutils</groupId> 
     <artifactId>commons-beanutils</artifactId> 
     <version>1.7.0</version> 
     </dependency> 
     ... 
    </dependencies> 
    </dependencyManagement> 
</project> 

proyecto Niño

<project> 
<modelVersion>4.0.0</modelVersion> 
<groupId>my.group</groupId> 
<artifactId>child1</artifactId> 
<packaging>jar</packaging> 
<name>Child1</name> 
<version>1.0</version> 
<dependencyManagement> 
    <dependencies> 
    <dependency> 
     <groupId>my.group</groupId> 
     <artifactId>My-Project-BOM</artifactId> 
     <version>1.0</version> 
     <type>pom</type> 
     <scope>import</scope> 
    </dependency> 
    </dependencies> 
</dependencyManagement> 
<dependencies> 
    <dependency> 
     <groupId>commons-beanutils</groupId> 
     <artifactId>commons-beanutils</artifactId> 
    </dependency> 
</dependencies> 
... 
</project> 

maven dependency plugin tiene unos objetivos para ayudarle a obtener la jerarquía de dependencia.

mvn dependency:list 
mvn dependency:tree 
mvn dependency:analyze 
+0

Buena idea que no sabía. Pero dado que tenemos un POM de nivel superior del que todos los demás POM son hijos, podría usar la administración de dependencias allí. Todavía no veo cómo esto resolvería el problema de limpiar la administración de dependencias. El problema dentro de una BOM sería el mismo. – anselm

+0

Nunca supe sobre este enfoque. Me gusta, ya que le da el control sobre el control de versiones, pero las dependencias aún se declaran donde se requieren con el alcance adecuado. También es fácil de usar una versión específica si es necesario. – Robin

+0

Enlace similar [¿Hay una manera simple de eliminar las dependencias no utilizadas de un maven pom.xml? - Stack Overflow] (http://stackoverflow.com/questions/1517611/is-there-a-simple-way-to-remove-unused-dependencies-from-a-maven-pom-xml) –

0

Puede obtener el POM POM a las dependencias, y el código de referencias que las causan, utilizando el Structure101composition perspective. Cree un nuevo proyecto s101, escriba Maven, especifique el archivo raíz pom.xml, finalice (use los valores predeterminados para el resto del asistente), luego seleccione la perspectiva de composición (segundo botón hacia abajo en la barra de herramientas vertical arriba a la izquierda de la IU) y verá algo como esto:

Structure101 POM dependency graph

Cuestiones relacionadas