155 votes

Existe-t-il un moyen d'exclure les artefacts hérités d'un POM parent ?

Les artefacts des dépendances peuvent être exclus en déclarant un élément <exclusions> à l'intérieur d'un élément <dependency> Mais dans ce cas, il est nécessaire d'exclure un artefact hérité d'un projet parent. Voici un extrait du POM en question :

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>test</groupId>
  <artifactId>jruby</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <parent>
      <artifactId>base</artifactId>
      <groupId>es.uniovi.innova</groupId>
      <version>1.0.0</version>
  </parent>

  <dependencies>      
      <dependency>
          <groupId>com.liferay.portal</groupId>
          <artifactId>ALL-DEPS</artifactId>
          <version>1.0</version>
          <scope>provided</scope>
          <type>pom</type>
      </dependency>
  </dependencies>
</project>

base dépend de l'artefact javax.mail:mail-1.4.jar y ALL-DEPS dépend d'une autre version de la même bibliothèque. En raison du fait que mail.jar de ALL-DEPS existent dans l'environnement d'exécution, bien qu'elles ne soient pas exportées, se heurtent à l'environnement d'exécution. mail.jar qui existe sur le parent, qui est scopé en tant que compile .

Une solution pourrait être de supprimer mail.jar du POM parent, mais la plupart des projets qui héritent de la base en ont besoin (c'est une dépendance transitive pour log4j). Ce que j'aimerais donc faire, c'est simplement exclure la bibliothèque du parent du projet de l'enfant comme cela pourrait être le cas si base était une dépendance et non le pom parent :

...
    <dependency>
        <artifactId>base</artifactId>
        <groupId>es.uniovi.innova</groupId>
        <version>1.0.0</version>
        <type>pom<type>
        <exclusions>
          <exclusion>
             <groupId>javax.mail</groupId>
             <artifactId>mail</artifactId>
          </exclusion>
        </exclusions>
    </dependency>
...

0voto

Amir Shaikh Points 31

Désactiver l'artefact de l'enfant hérité du parent

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>                                               
        <exclusion>
            <groupId>org.springframework.boot</groupId>         
            <artifactId>spring-boot-starter-logging</artifactId> 
        </exclusion>
    </exclusions>
</dependency>

Retirer un artefact spécifique d'un parent

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>                                  
        <exclusion>                                     
        <groupId>org.apache.logging.log4j</groupId>         
        <artifactId>log4j-to-slf4j</artifactId>             
        </exclusion>
        <exclusion>                                     
            <groupId>ch.qos.logback</groupId>               
            <artifactId>logback-classic</artifactId>     
        </exclusion>
    </exclusions>
</dependency>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X