Question

Mon projet inclut un fichier jar car il est répertorié en tant que dépendance transitive.

Cependant, j'ai vérifié non seulement que je n'en avais pas besoin, mais que cela posait des problèmes, car une classe à l'intérieur des fichiers jar masquait une classe dont j'avais besoin dans un autre fichier jar.

Comment puis-je laisser de côté un seul fichier jar de mes dépendances transitives?

Était-ce utile?

La solution

Vous pouvez exclure une dépendance de la manière suivante:

        <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring</artifactId>
                <version>2.5.6</version>
                <exclusions>
                        <exclusion>
                                <groupId>commons-logging</groupId>
                                <artifactId>commons-logging</artifactId>
                        </exclusion>
                </exclusions>
        </dependency>

Autres conseils

La méthode correcte consiste à utiliser le mécanisme des exclusions. Toutefois, vous pouvez parfois préférer utiliser le hack suivant pour éviter d’ajouter un grand nombre d’exclusions lorsque de nombreux artefacts ont la même dépendance transitive que vous souhaitez ignorer. Plutôt que de spécifier une exclusion, vous définissez une dépendance supplémentaire avec une étendue de "fourni". Cela indique à Maven que vous vous chargez manuellement de fournir cet artefact au moment de l'exécution et qu'il ne sera donc pas empaqueté. Par exemple:

    <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring</artifactId>
            <version>2.5.6</version>
    </dependency>
    <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
            <scope>provided</scope>
    </dependency>

Effet secondaire: vous devez spécifier une version de l'artefact à ignorer, et son fichier POM sera extrait au moment de la construction. ce n'est pas le cas avec les exclusions régulières. Cela peut poser un problème si vous exécutez votre référentiel privé Maven derrière un pare-feu.

Vous pouvez le faire en excluant explicitement l'artefact problématique. Prenez la dépendance qui inclut le problème et marquez-la comme étant exclue:

D'après le maven site Web :

<dependency>
  <groupId>group-a</groupId>
  <artifactId>artifact-a</artifactId>
  <version>1.0</version>
  <exclusions>
    <exclusion>
      <groupId>group-c</groupId>
      <artifactId>excluded-artifact</artifactId>
    </exclusion>
  </exclusions>
</dependency>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top