Ich habe eine pom.xml-Datei und darin sehe ich, dass es 3 Abhängigkeiten gibt, auf die für dasselbe verwiesen wird, <artifactId>
der Unterschied liegt in Tags
<classifier>sources</classifier>
<classifier>javadoc</classifier>
Ich habe die Abhängigkeiten gelöscht, die die hatten SOURCES/JAVADOC
und nur eine Abhängigkeit beibehalten. Ich habe meine Anwendung getestet und alles funktioniert einwandfrei.
Was ist der Zweck der Verwendung dieses Klassifizierertags? und warum ich Abhängigkeiten zweimal duplizieren muss, um ein <classifier>
Tag mit hinzuzufügen 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>
quelle
Noch eine pragmatischere Antwort anhand eines Beispiels, um die Nützlichkeit von
classifier
besser zu verstehen .Angenommen , Sie haben einen Bedarf für zwei Versionen eines Artefakts: für
openjpa
und füreclipselink
- sagen wir , weil Glas enthält Einheiten, die JPA - Implementierung verbessert werden benötigt , um speziell.Möglicherweise haben Sie eine andere Behandlung für diese Builds, die in Maven-Profilen definiert sind, und die verwendeten Profile haben dann auch die Eigenschaft
<classifier />
.Um die unterschiedlich klassifizierten Versionen zu erstellen, würde in
pom
dermaven-jar-plugin
dann folgend konfiguriert<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> <configuration> <classifier>${classifier}</classifier> </configuration> </plugin>
Die Installation beider würde zu Dateien im Repo führen, die ungefähr so aussehen:
Jetzt wäre es nur noch eine Frage der
classifier
Verwendung, also für OpenJPA zum Beispiel:<dependency> <groupId>org.example</groupId> <artifactId>data</artifactId> <version>1.0.0</version> <classifier>openjpa</classifier> </dependency>
und für EclipseLink würden Sie den Klassifikator wie folgt wechseln:
<classifier>eclipselink</classifier>
quelle
[openjpa|eclipselink]
war nur ein "Selektor" für die Auswahl eines der beiden.Beispiel für einen Klassifikator
Als Motivation für dieses Element betrachten Sie beispielsweise ein Projekt, das ein Artefakt für JRE 1.8 bietet, gleichzeitig aber auch ein Artefakt, das JRE 1.7 weiterhin unterstützt. Das erste Artefakt könnte mit dem Klassifikator jdk18 und das zweite mit jdk14 ausgestattet sein, so dass Clients auswählen können, welches verwendet werden soll.
Ein weiterer häufiger Anwendungsfall für Klassifizierer ist die Notwendigkeit, sekundäre Artefakte an das Hauptartefakt des Projekts anzuhängen. Wenn Sie das zentrale Maven-Repository durchsuchen, werden Sie feststellen, dass die Klassifiziererquellen und Javadoc verwendet werden, um den Projektquellcode und die API-Dokumente zusammen mit den gepackten Klassendateien bereitzustellen.
quelle
Es ermöglicht die Unterscheidung von zwei Artefakten, die zum selben POM gehören, aber unterschiedlich erstellt wurden, und wird nach der Version an den Dateinamen angehängt.
Wenn Sie beispielsweise andere Artefakte in Ihrem Repository haben (Dokumente, Quellen ...), können Sie diese referenzieren und als Abhängigkeit zu Ihrem Projekt hinzufügen. In diesem Code erhalten
<classifier>sources</classifier>
wir durch Hinzufügen von die Datei sources.jar aus dem Repository.<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>
Tatsächlich können Sie Ihre Abhängigkeiten mit der weiteren Granularitätsebene lokalisieren.
quelle
Laut folgendem: https://blog.packagecloud.io/eng/2017/03/09/how-does-a-maven-repository-work/ Klassifizierertag impliziert "Sekundäres Artefakt", dessen "transitive Abhängigkeit" wird abgeschnitten! Somit ändert das Klassifizierertag nicht nur "Maven Coordinate" durch $ artefaktId- $ version- $ classifier.jar!
quelle