Wie kann ich SNAPSHOT mit Quellen und JavaDoc bereitstellen?

92

Ich möchte mit meinen Snapshots Quellen und Javadocs bereitstellen. Dies bedeutet, dass ich den folgenden Befehl automatisieren möchte:

mvn clean source:jar javadoc:jar deploy

Nur um auszuführen:

mvn clean deploy

Ich möchte nicht, dass die Generierung von Javadoc / Quellen während der installPhase ausgeführt wird (dh lokale Builds).

Ich weiß, dass Quell- / Javadoc-Plugins mit der Ausführung des Plugins synchronisiert werden können, releaseaber ich kann nicht herausfinden, wie ich es mit den Snapshots-Releases verbinden kann.

Henryk Konsek
quelle

Antworten:

76
<build>
  <plugins> 
    <plugin>
      <artifactId>maven-source-plugin</artifactId>
      <executions>
        <execution>
          <id>attach-sources</id>
          <phase>deploy</phase>
          <goals><goal>jar-no-fork</goal></goals> 
        </execution>
      </executions>
    </plugin>
    <plugin> 
      <artifactId>maven-javadoc-plugin</artifactId> 
      <executions> 
        <execution> 
          <id>attach-javadocs</id>
          <phase>deploy</phase>
          <goals><goal>jar</goal></goals> 
        </execution> 
      </executions> 
    </plugin>
    <plugin> 
      <!-- explicitly define maven-deploy-plugin after other to force exec order -->
      <artifactId>maven-deploy-plugin</artifactId> 
      <executions> 
        <execution> 
          <id>deploy</id>
          <phase>deploy</phase>
          <goals><goal>deploy</goal></goals> 
        </execution> 
      </executions> 
    </plugin>
  </plugins> 
</build>

Ein vollständiges Beispiel finden Sie im übergeordneten OSS-POM von Sonatype .

sfussenegger
quelle
1
Ich benutze dieses Setup und es funktioniert ganz gut. Ich hatte jedoch zwei kleine Probleme: Zum einen sind generierte Quellen nicht im Ziel "jar" enthalten, Sie benötigen "jar-no-fork". Zweitens gibt es einen Fehler im Release-Plugin, der dazu führt, dass die Release-Quellen zweimal generiert werden (und daher zweimal verwendet werden, was zu Problemen mit Repository-Managern führt)
mglauche
1
maven-source-plugin:jarWird packagestandardmäßig an die Phase angehängt, sodass Sie aufhören <phase>verify</phase>und dasselbe erreichen können. Außerdem bin ich mir nicht sicher, warum Sie dies anhängen sollten, um es trotzdem zu überprüfen, da diese Phase für das "Packen des Projekts und Ausführen von Integrationstests" vorgesehen ist.
Matt B
@mglauche @matt danke für deine Kommentare. Ich habe gerade die entsprechenden Änderungen vorgenommen.
sfussenegger
1
@Henryk Ok, ich habe explizit das Maven-Deploy-Plugin hinzugefügt, und Maven scheint (oder versucht), die Ausführung in dem zu garantieren, in dem die Plugins im POM definiert sind. Es könnte jedoch einige Experimente erfordern.
sfussenegger
1
Die Verwendung einer zufälligen ID erstellt eine neue Ausführung. Ich dachte, Sie möchten die Standardausführung "neu zuordnen"
Hurda
48

Nur um eine Alternative hinzuzufügen, bei der Sie sich nicht mit der Plugin-Konfiguration herumschlagen müssen:

mvn -DperformRelease=true [goals]

Das Guthaben geht an mcbeelen von http://sea36.blogspot.com/2009/02/attaching-javadocs-and-sources-to-maven.html?showComment=1314177874102#c6853460758692768998

Dan
quelle
4
Ich möchte erwähnen, dass diese Funktion in einer zukünftigen Version von Maven (möglicherweise Maven-4?) Verschwinden könnte. Lesen
Dan
45

Der Artikel, auf den sich Dan bezieht, erwähnt auch einen anderen Ansatz, der ohne Modifikation von Poms funktioniert UND nicht so schnell verschwindet:

mvn clean javadoc: jar source: jar install

Was gut funktioniert mit Maven 3+, zusammen mit ...

mvn clean javadoc: jar source: jar deploy

Was ich von Jenkins getestet habe, der auf Nexus bereitgestellt wird.

Dieser Ansatz war nett, weil ich nur einige Jenkins-Jobs ändern musste und mich nicht mit meinen Poms anlegen musste.

HDave
quelle
5
Danke für eine pomfreie Lösung! Beachten Sie, dass javadoc: jar und / oder source: jar vor der Installation oder Bereitstellung angezeigt werden müssen, da sonst die zusätzlichen Jars nicht an die Bereitstellung "angehängt" werden.
Seanf
2
FWIW diese Optionen funktionieren auch mit package:mvn clean javadoc:jar source:jar package
Ecoe
Dies ist die gute Antwort, da sie Ihnen den genauen Befehl zum Erstellen und Hochladen von Quellen und Javadoc in Ihr Repo enthält.
Russellhoff