it-swarm.com.de

Was ist der Zweck der Klassifizierer-Eigenschaft von Mavens-Abhängigkeitsdeklarationen?

Ich habe eine pom.xml-Datei und darin sehe ich, dass es 3 Abhängigkeiten gibt, auf die für denselben <artifactId> verwiesen wird 

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

Ich habe die Abhängigkeiten gelöscht, die den SOURCES/JAVADOC hatten, und nur eine Abhängigkeit beibehalten. Ich habe meine Anwendung getestet und alles funktioniert einwandfrei. 

Was ist der Zweck dieses Klassifikator-Tags? und warum ich Abhängigkeiten zweimal duplizieren muss, um <classifier>-Tag mit SOURCES/JAVADOC hinzuzufügen. 

<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

Mit dem Klassifizierer können Artefakte unterschieden werden, die aus demselben POM erstellt wurden, sich jedoch in ihrem Inhalt unterscheiden. Es ist eine optionale und beliebige Zeichenfolge, die - sofern vorhanden - unmittelbar nach der Versionsnummer an den Artefaktnamen angehängt wird.

weitere Informationen finden Sie unter http://maven.Apache.org/pom.html

45
Biswajit

Beispiel für Klassifizierer 
Als Motivation für dieses Element betrachten Sie beispielsweise ein Projekt, das ein Artefakt für JRE 1.8 und gleichzeitig auch ein Artefakt bietet, das JRE 1.7 unterstützt. Das erste Artefakt könnte mit dem Klassifikator jdk18 und das zweite mit jdk14 ausgestattet sein, so dass die Clients den zu verwendenden auswählen können.

Ein weiterer häufiger Anwendungsfall für Klassifikatoren ist die Notwendigkeit, sekundäre Artefakte an das Hauptartefakt des Projekts anzuhängen. Wenn Sie das zentrale Repository von Maven durchsuchen, werden Sie feststellen, dass die Klassifikatorquellen und Javadoc zum Bereitstellen des Projektquellcodes und der API-Dokumente zusammen mit den gepackten Klassendateien verwendet werden.

Noch eine pragmatischere Antwort durch ein Beispiel, um die Nützlichkeit von classifier besser zu verstehen.

Angenommen, Sie benötigen zwei Versionen eines Artefakts: für openjpa und für eclipselink - beispielsweise, weil jar Entitäten enthält, die speziell für die erweiterte JPA-Implementierung erforderlich sind.

In Maven-Profilen ist möglicherweise eine andere Behandlung für diese Builds vorgesehen, und die verwendeten Profile verfügen außerdem über die Eigenschaft <classifier />.

Um die unterschiedlich klassifizierten Versionen zu erstellen, wird in pom der maven-jar-plugin anschließend 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 in Repo-Dateien führen, die etwa wie folgt aussehen:

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

Nun würde es nur noch um classifier gehen, welche verwendet wird, also

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

Es ermöglicht die Unterscheidung von zwei Artefakten, die zum selben POM gehören, aber unterschiedlich gebaut wurden, und wird nach der Version an den Dateinamen angehängt.

Wenn Sie zum Beispiel andere Artefakte in Ihrem Repository haben (docs, sources ...), können Sie sie referenzieren und sie als Abhängigkeit . In diesem Code hinzufügen. Fügen Sie in diesem Code <classifier>sources</classifier> hinzu. Wir erhalten die sources.jar vom 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ät ermitteln. 

1
Mr.Q

Entsprechend den folgenden Angaben: https://blog.packagecloud.io/eng/2017/03/09/how-does-a-maven-repository-work/ Der Klassifizierer-Tag hat folgende Bedeutung: " Secondary Artifact ", dessen" transitive Abhängigkeit "abgeschnitten wird! Das Klassifizierungs-Tag ändert also nicht nur" Maven Coordinate "um $ artifactId- $ version- $ classifier.jar!

0
Zhu Fei