2012-02-02 41 views
12

Ho una query sull'esclusione delle dipendenze Maven. Si consideri il seguenteEscluso le dipendenze 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> 

Sto cercando di ottenere un passaggio dalla primavera 3.0.6 alla 3.1.0. Spring security 3.1.0 aveva una dipendenza da spring-security-web versione 3.0.6 che a sua volta aveva una dipendenza da spring-web 3.0.6. Devo portare tutto a 3.1.0. Quindi escludo spring-security-web dalla sicurezza Spring, ho una dipendenza separata per spring-security-web 3.1.0 che a sua volta esclude la versione spring-web 3.0.6 e fornisco una versione spring-web 3.1.0 separata. Questo lavoro, ma credo che ci sarebbe un approccio molto più facile. Ho provato a mettere un'esclusione per il web di primavera sotto la sicurezza di Primavera ma non ha funzionato. Per favore aiuto .

risposta

18

È possibile utilizzare lo dependency management mechanism.

Se si crea voci nella sezione > < dependencyManagement del pom per la primavera-security-web e la primavera-web con la desiderata 3.1.0 versione impostare la versione gestita del manufatto sovrascriverà quelli specificati nella albero delle dipendenze transitiva .

Non sono sicuro che questo ti risparmi davvero qualsiasi codice, ma è una soluzione più pulita IMO.

+0

Dovrò arrangiarmi ora. Spero che le esclusioni globali possano renderlo più facile .. –

8

esclusioni globali look like they're being worked on, ma fino ad allora ...

Dal Sonatype maven reference (in fondo alla pagina):

gestione delle dipendenze in un POM di primo livello è diverso da appena definire una dipendenza su un POM padre ampiamente condiviso. Per i principianti, tutte le dipendenze sono ereditate. Se mysql-connector-java fosse elencato come dipendenza del progetto principale di livello superiore, ogni singolo progetto nella gerarchia avrebbe un riferimento a questa dipendenza. Invece di aggiungendo dipendenze non necessarie, l'utilizzo di dependencyManagement consente a di consolidare e centralizzare la gestione delle versioni di dipendenza senza aggiungere dipendenze ereditate da tutti i bambini . In altre parole, l'elemento dependencyManagement è equivalente a una variabile di ambiente che consente di dichiarare una dipendenza ovunque sotto un progetto senza specificare un numero di versione .

Per fare un esempio:

<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> 

Non ha il codice meno prolissa nel complesso, ma rende meno verboso dove conta. Se lo vuoi ancora meno dettagliato puoi anche follow these tips dal riferimento Sonatype.

+0

Grazie per questo. +1 per la cosa di esclusione globale e riferimento. –

Problemi correlati