web-dev-qa-db-fra.com

Quel est le but de la propriété de classificateur des déclarations de dépendance Mavens?

J'ai un fichier pom.xml et en ce que je vois qu'il y a 3 dépendances référencées pour le même <artifactId> la différence sont dans les balises 

<classifier>sources</classifier>
<classifier>javadoc</classifier>

J'ai supprimé les dépendances qui avaient le SOURCES/JAVADOC et n'en ai gardé qu'une. J'ai testé mon application et tout fonctionne correctement. 

Quel est le but d'utiliser cette balise de classificateur? et pourquoi j'ai besoin de dupliquer deux fois les dépendances pour ajouter la balise <classifier> avec SOURCES/JAVADOC

<dependency>
   <groupId>oauth.signpost</groupId>
   <artifactId>signpost-commonshttp4</artifactId>
   <version>1.2.1.2</version>
   <type>jar</type>
   <scope>compile</scope>
</dependency>
  <dependency>
   <groupId>oauth.signpost</groupId>
   <artifactId>signpost-commonshttp4</artifactId>
   <version>1.2.1.2</version>
   <type>jar</type>
      ***<classifier>javadoc</classifier>***
   <scope>compile</scope>
</dependency>
<dependency>
   <groupId>oauth.signpost</groupId>
   <artifactId>signpost-commonshttp4</artifactId>
   <version>1.2.1.2</version>
   <type>jar</type>
   ***<classifier>sources</classifier>***
   <scope>compile</scope>
</dependency> 
58
pushya

Le classificateur permet de distinguer les artefacts construits à partir du même POM mais dont le contenu diffère. C'est une chaîne facultative et arbitraire qui - si présente - est ajoutée au nom de l'artefact juste après le numéro de version.

pour plus de détails, consultez http://maven.Apache.org/pom.html

45
Biswajit

Exemple pour classificateur 
Pour motiver cet élément, considérons par exemple un projet qui propose un artefact ciblant JRE 1.8 mais également un artefact prenant toujours en charge JRE 1.7. Le premier artefact pourrait être équipé du classificateur jdk18 et le second de jdk14 de sorte que les clients puissent choisir lequel utiliser.

Un autre cas d'utilisation courant pour les classificateurs est la nécessité d'associer des artefacts secondaires à l'artefact principal du projet. Si vous parcourez le référentiel central Maven, vous remarquerez que les sources et les javadoc du classificateur sont utilisés pour déployer le code source du projet et les documents de l'API avec les fichiers de classe fournis.

5

Encore une autre réponse plus pragmatique par un exemple pour aider à mieux comprendre l’utilité de classifier.

Supposons que vous ayez besoin de deux versions d'un artefact: pour openjpa et pour eclipselink - par exemple, car jar contient des entités devant être améliorées de manière spécifique par la mise en œuvre de JPA.

Vous pouvez avoir un traitement différent pour ces générations défini dans les profils Maven et les profils utilisés ont alors aussi la propriété <classifier />.

Pour construire les versions classées différemment, dans pom le maven-jar-plugin serait alors configuré comme suit

<plugin>
   <groupId>org.Apache.maven.plugins</groupId>
   <artifactId>maven-jar-plugin</artifactId>
   <version>3.0.2</version>
   <configuration>
       <classifier>${classifier}</classifier>
   </configuration>
</plugin>

L'installation des deux résulterait en des fichiers dans le dépôt, comme suit:

org/example/data/1.0.0/data-1.0.0.pom
org/example/data/1.0.0/data-1.0.0-openjpa.jar
org/example/data/1.0.0/data-1.0.0-eclipselink.jar 

Maintenant, ce serait seulement une question de classifier à laquelle on utilisera, donc

<dependency>
   <groupId>org.example</groupId>
   <artifactId>data</artifactId>
   <version>1.0.0</version>
   <classifier>[openjpa|eclipselink]</classifier>
</dependency>
2
pirho

Il permet de distinguer deux artefacts appartenant au même POM mais ayant été construits différemment. Il est ajouté au nom de fichier après la version.

Par exemple, si vous avez d'autres artefacts dans votre référentiel (docs, sources ...), vous pouvez les référencer et les ajouter à votre projet en tant que dépendance . Dans ce code en ajoutant le <classifier>sources</classifier> que nous obtenons du source.jar depuis le référentiel . 

    <dependency>
    <groupId>oauth.signpost</groupId>
    <artifactId>signpost-commonshttp4</artifactId>
    <version>1.2.1.2</version>
    <type>jar</type>
    ***<classifier>sources</classifier>***
    <scope>compile</scope>
    </dependency> 

en fait, il vous permet de localiser vos dépendances avec un niveau de granularité supplémentaire. 

1
Mr.Q

Selon ce qui suit: https://blog.packagecloud.io/eng/2017/03/09/how-does-a-maven-repository-work/ Tag classifier has implique " Secondary Artifact ", dont la" dépendance transitive "sera coupée! Ainsi, la balise du classificateur ne change pas seulement la" Coordonnée Maven "de $ artifactId- $ version- $ classifier.jar!

0
Zhu Fei