2012-02-02 26 views
12

Tengo una consulta sobre la exclusión de las dependencias de maven. Considere lo siguienteExcluyendo las dependencias de Maven

<dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-taglibs</artifactId> 
     <version>${spring-security.version}</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.springframework.security</groupId> 
       <artifactId>spring-security-web</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-web</artifactId> 
     <version>3.1.0.RELEASE</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring-web</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>3.1.0.RELEASE</version> 
    </dependency> 
    <dependency> 

Estoy tratando de lograr una transición de Spring 3.0.6 a 3.1.0. Spring security 3.1.0 tenía una dependencia en spring-security-web versión 3.0.6 que a su vez dependía de spring-web 3.0.6. Necesito traer todo a 3.1.0. Así que excluyo spring-security-web de Spring security, tengo una dependencia separada para spring-security-web 3.1.0 que a su vez excluye la versión spring-web 3.0.6 y proporciono una versión Spring-web 3.1.0 por separado. Este trabajo, pero creo que sería mucho más fácil. Traté de poner una exclusión para la web de primavera bajo la seguridad de Spring pero no funcionó. Por favor ayuda .

Respuesta

18

Puede utilizar el dependency management mechanism.

Si crea entradas en la sección > < DependencyManagement de su pom para la primavera-seguridad en la web y la primavera en la web con la versión 3.1.0 se desea establecer la versión administrada del artefacto anulará los especificados en el árbol de dependencia transitiva .

No estoy seguro si eso realmente le ahorra algún código, pero es una solución más limpia IMO.

+0

Voy a tener que conformarme con esto ahora. Espero que las exclusiones globales lo hagan más fácil. –

8

exclusiones globales look like they're being worked on, pero hasta entonces ...

Desde el Sonatype maven reference (parte inferior de la página):

gestión de Dependencia en un POM de nivel superior es diferente a simplemente definir una dependencia en un POM padre ampliamente compartido. Para empezar, todas las dependencias se heredan. Si mysql-connector-java figuraba como una dependencia del proyecto primario de nivel superior, cada proyecto en la jerarquía tendría una referencia a esta dependencia. En lugar de agregar dependencias innecesarias, usar dependencyManagement permite consolidar y centralizar la administración de las versiones de dependencia sin agregar dependencias que son heredadas por todos los hijos . En otras palabras, el elemento dependencyManagement es equivalente a una variable de entorno que le permite declarar una dependencia en cualquier lugar debajo de un proyecto sin especificar un número de versión .

A modo de ejemplo:

<dependencies> 
    <dependency> 
     <groupId>commons-httpclient</groupId> 
     <artifactId>commons-httpclient</artifactId> 
     <version>3.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
     <version>3.0.5.RELEASE</version> 
    </dependency> 
    </dependencies> 
    <dependencyManagement> 
    <dependencies> 
     <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
     <exclusions> 
      <exclusion> 
      <groupId>commons-logging</groupId> 
      <artifactId>commons-logging</artifactId> 
      </exclusion> 
     </exclusions> 
     </dependency> 
     <dependency> 
     <groupId>commons-httpclient</groupId> 
     <artifactId>commons-httpclient</artifactId> 
     <exclusions> 
      <exclusion> 
      <groupId>commons-logging</groupId> 
      <artifactId>commons-logging</artifactId> 
      </exclusion> 
     </exclusions> 
     </dependency> 
    </dependencies> 
    </dependencyManagement> 

no tiene el código de menos detallado en general, pero sí lo hace menos detallado en el que cuenta. Si aún lo quiere menos detallado, puede follow these tips también de la referencia de Sonatype.

+0

Gracias por esto. +1 para la cosa de exclusión global y referencia. –

Cuestiones relacionadas