web-dev-qa-db-fra.com

Excluant les dépendances Maven

J'ai une question sur l'exclusion des dépendances maven. Considérer ce qui suit

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

J'essaie de réaliser une transition du printemps 3.0.6 au 3.1.0. Spring security 3.1.0 avait une dépendance sur spring-security-web version 3.0.6 qui à son tour avait une dépendance sur spring-web 3.0.6. Je dois apporter tout cela à 3.1.0. J'exclus donc Spring-security-web de Spring security, j'ai une dépendance distincte pour spring-security-web 3.1.0 qui à son tour exclut la version spring-web 3.0.6 et je fournis une version spring-web 3.1.0 distincte. Ce travail, mais je pense qu'il y aurait une approche beaucoup plus facile. J'ai essayé de mettre une exclusion pour Spring Web sous la sécurité Spring, mais cela n'a pas fonctionné. Veuillez aider.

22
Aravind A

Vous pouvez utiliser le mécanisme de gestion des dépendances .

Si vous créez des entrées dans la section <dependencyManagement> de votre pom pour spring-security-web et spring-web avec la version 3.1.0 souhaitée, la version gérée de l'artefact remplacera celles spécifiées dans l'arborescence des dépendances transitives.

Je ne sais pas si cela vous fait vraiment économiser du code, mais c'est une solution plus propre IMO.

22
Mike Deck

Exclusions globales on dirait qu'ils sont en cours d'élaboration , mais d'ici là ...

De la référence Sonatype maven (bas de la page):

La gestion des dépendances dans un POM de niveau supérieur est différente de la simple définition d'une dépendance sur un POM parent largement partagé. Pour commencer, toutes les dépendances sont héritées. Si mysql-connector-Java était répertorié comme une dépendance du projet parent de niveau supérieur, chaque projet dans la hiérarchie aurait une référence à cette dépendance. Au lieu d'ajouter des dépendances inutiles, l'utilisation de dependencyManagement vous permet de consolider et de centraliser la gestion des versions de dépendance sans ajouter de dépendances héritées par tous les enfants. En d'autres termes, l'élément dependencyManagement est équivalent à une variable d'environnement qui vous permet de déclarer une dépendance n'importe où en dessous d'un projet sans spécifier de numéro de version.

Par exemple:

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

Cela ne rend pas le code moins détaillé dans l'ensemble, mais il le rend moins détaillé là où il compte. Si vous le voulez toujours moins verbeux, vous pouvez suivez ces conseils également à partir de la référence Sonatype.

12
Spencer Kormos