2016-03-24 8 views
4

Sonatype verfügt über ein Repository, für das ich eine JAR-Datei bereitstellen möchte, und sie fragt nach separaten Dateien für Anwendung, Quellen und javadocs:So generieren Sie separate JAR-Dateien für Anwendung, Quelle und Dokumentation (für central.sonatype.org)

Beispiel:

example-application-1.4.7.pom 
example-application-1.4.7.jar 
example-application-1.4.7-sources.jar 
example-application-1.4.7-javadoc.jar 

In Scala SBT, ich habe einen Befehl "Paket" genannt, die die jAR-Datei für das Projekt erzeugt, aber das erzeugt nur „Beispiel-Anwendung-1.4.7.jar ".

Frage: Was soll ich tun, um die anderen beiden JAR-Dateien zu generieren?

+0

In Maven würden Sie das 'javadoc' und' sources' Plugin verwenden. –

+0

Es tut mir leid, ich kenne Maven nicht. –

+0

Sie multi-tagged Maven und SBT. Sie müssen Details zu Ihrem Build angeben, damit wir geeignete Änderungen empfehlen können. – chrylis

Antwort

3

In Maven, um die zusätzlichen -sources und -javadoc Artefakte zu erhalten, fügen Sie folgendes zu Ihrem POM-Datei:

<build> 
    <plugins> 
     <!-- additional plugin configurations, if any.. --> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-source-plugin</artifactId> 
      <version>3.0.0</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>jar</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-javadoc-plugin</artifactId> 
      <version>2.10.3</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>jar</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Hinweis das Snippet oben:

  • Wir Berufung auf die Maven Source Plugin zu Erstellen Sie eine zusätzliche JAR-Dateien für Quellen
  • Wir rufen die Maven Javadoc Plugin zum Erstellen einer zusätzlichen JAR-Dateien für Javadoc

Executing

mvn clean package 

Sie werden diese zwei weitere Gläser in den target Ordner.


Die .pom Datei stattdessen während der install Phase erzeugt wird, aber es wird nicht unter dem target Ordner abgelegt. Grundsätzlich ist es eine Kopie Ihrer pom.xml Datei mit einer anderen Erweiterung, die Maven während des Abhängigkeitsvermittlungsprozesses verwendet, um zu überprüfen, welche transitiven Abhängigkeiten vom betreffenden Artefakt benötigt werden.

Executing

mvn clean install 

Maven wird das Artefakt in Ihrem lokalen Cache (in der Maschine), unter path_to_cache/.m2/repository/your_groupId/your_artifactId/your_version/ installieren. In diesem Ordner finden Sie auch die Datei .pom, die Sie normalerweise nicht verteilen müssen (sie wird automatisch von Maven erstellt).


Weitere Anmerkung: Sie wollen wahrscheinlich nicht diese zusätzlichen JAR-Dateien an jedem und jedem Build zu erzeugen, so baut sich normal zu beschleunigen und sie über nur auf Nachfrage, könnten Sie den Code-Schnipsel wickeln in einem Maven profile .

Sie können dies erreichen, indem Sie den Code-Schnipsel oben aus Ihrem build Abschnitt zu entfernen und einen weiteren Abschnitt am Ende Ihres pom hinzu:

<profiles> 
    <profile> 
     <id>prepare-distribution</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-source-plugin</artifactId> 
        <version>3.0.0</version> 
        <executions> 
         <execution> 
          <goals> 
           <goal>jar</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-javadoc-plugin</artifactId> 
        <version>2.10.3</version> 
        <executions> 
         <execution> 
          <goals> 
           <goal>jar</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

dass also normale baut diese Gläser nicht mehr schaffen würde, aber bei der Ausführung die folgenden:

mvn clean install -Pprepare-distribution 

Sie würden sie stattdessen zurückbekommen. Die Option -P aktiviert tatsächlich bei Bedarf das mit der ID prepare-distribution definierte Profil.


Mit Maven 3 ein Standardprofil kommt bereits als Teil der super pom, die exakt die gleichen Aktionen (Quellen und javadoc Artefakt), also keine Notwendigkeit, etwas zu Ihrem bestehenden Projekt hinzuzufügen. Führen Sie einfach:

mvn clean install -Prelease-profile 

Oder um es zu aktivieren über eine Eigenschaft

mvn clean install -DperformRelease=true 

jedoch, wie auch in dem Super-pom angegeben, kann dieses Profil in zukünftigen Versionen entfernt werden (obwohl es seit dem ersten Maven Version bis Version 3.3.9 bisher)

HINWEIS: Das Freisetzungsprofil wird von zukünftigen Versionen von entfernt werden die Super POM

Der Hauptgrund für diese Warnung ist, höchstwahrscheinlich für die Nutzung der Maven Release Plugin zu schieben, die Verwendung dieses Profils über die useReleaseProfile Option des release:perform Ziels indirekt macht.


Wie Kommentare hervorgehoben, wenn Sie mit Maven (vor allem über die Konsole) nicht vertraut sind, würde ich empfehlen, auf jeden Fall zu

  • Go über die offizielle Maven in 5 minutes Dokumentation für eine schnelle, aber würdig aussehen.
  • Spielen Sie mit Maven von der Kommandozeile, gibt es dort, wo Maven Ihnen sein Bestes gibt. IDE-Integrationen sind großartig, aber die Befehlszeile ist der wahre Wendepunkt.
  • Spielen Sie dann mit der obigen POM-Anpassung, um sich mit einigen Konzepten und Verhaltensweisen vertraut zu machen, zuerst direkt als Teil Ihres Standard-Builds und dann in ein Profil verschoben.
  • Dann, und nur dann, bewegen Sie sich zu Maven Release Plugin Verwendung. Ich empfehle es als letzten Schritt, weil Sie bereits mehr Vertrauen und Verständnis gewonnen hätten und es als weniger magisch und vernünftiger betrachten.
+1

Das 'maven-release-plugin' funktioniert all das standardmäßig. Ich denke, das OP will _Release_, nicht ausschließlich _deploy_ (in Maven-Begriffen). – Tunaki

+0

Umm ... das OP möchte seine Scala SBT-Bibliothek an einem Ort platzieren, an dem Menschen sie zu ihren Projekten hinzufügen können, ohne einen nicht standardmäßigen Repo-Host/Standort angeben zu müssen. Das OP ist mit dem Befehlszeilenwerkzeug Maven noch nicht vertraut, da er auf IntelliJ angewiesen ist. –

Verwandte Themen