22

Wir verwenden Hudson und die maven-release-plugin, um die Release-Builds zu tun. Jetzt habe ich ein Projekt, das eine assembly enthält, die alle benötigten Komponenten zusammenfasst und sie dann in ein .tar.gz-Paket mit der gewünschten Verzeichnisstruktur packt.Bereitstellen von Assembly-Paket mit Maven-Release-Plugin

Jetzt versuche ich das release-plugin zu bekommen, dieses Paket in unserem Maven-Repository während der Veröffentlichung zu implementieren: Ziel ausführen, aber nur die Standard-Sachen (Quellen, Javadoc, POM) werden bereitgestellt.

Ich habe bereits das Assembly-Ziel an die Maven-Paket-Phase gebunden, und die .tar.gz-Datei wird während der Veröffentlichung erstellt, aber nicht in das Repository hochgeladen. Irgendwelche Hinweise, was ich hier falsch mache?

Hier ist die Montage-Plugin-Konfiguration:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2-beta-4</version> 
    <configuration> 
     <descriptors> 
     <descriptor>src/main/assembly/distribution.xml</descriptor> 
     </descriptors> 
     <finalName>${pom.artifactId}-${pom.version}</finalName> 
     <appendAssemblyId>false</appendAssemblyId> 
     <tarLongFileMode>warn</tarLongFileMode> 
    </configuration> 
    <executions> 
     <execution> 
      <id>dist-assembly</id> 
      <phase>package</phase> 
      <goals> 
       <goal>assembly</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Der Befehl I

mvn release:prepare release:perform release:clean 
+0

Vielleicht, wenn Sie uns den Code zeigen, oder verschleierten Code könnten wir Ihnen helfen – ant

Antwort

33

Inzwischen habe ich 2 Möglichkeiten gefunden, zu tun, was ich wollte.

Die Maven-Build-Helfer-Plugin ermöglicht es auf die Liste der Artefakte zusätzliche Einträge hinzufügen, die bereitgestellt werden sollen:

<plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>build-helper-maven-plugin</artifactId> 
     <version>1.3</version> 
     <executions> 
      <execution> 
      <id>attach-distribution</id> 
      <phase>package</phase> 
      <goals> 
       <goal>attach-artifact</goal> 
      </goals> 
      <configuration> 
       <artifacts> 
       <artifact> 
        <file>target/${pom.artifactId}-${pom.version}.tar.gz</file> 
        <type>tar.gz</type> 
       </artifact> 
       </artifacts> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 

Die andere ist so einfach wie es nur geht und jemand auf der Maven-user Mailingliste wies darauf hin. Einfache Verwendung der Montage: Einzelziel statt Assembly: Montage. Auf diese Weise wird das generierte Artefakt während der Bereitstellungsphase in das Repository hochgeladen.

<execution> 
     <id>dist-assembly</id> 
     <phase>package</phase> 
     <goals> 
      <goal>single</goal> <!-- that's all :) --> 
     </goals> 
    </execution> 
+0

Schade, dass das Plugin die Artefakt-ID nicht neu definiert – Adam

1

Dateien Bereitstellen ist nicht Bestandteil der Release-Plugin, aber die deploy Plugin ein Release ist zu bauen laufen (release verteilt das Zeug nicht von alleine, sondern Sie können das deploy-Plugin so konfigurieren, dass es während einer Veröffentlichung aufgerufen wird.

Normalerweise stellt das Deploy-Plug-in alle Artefakte im Remote-Repository bereit, Assemblys sind jedoch keine Artefakte. Maven kann .tar.gz-Archive in seinem Repository in keiner Weise verwenden, daher ist es nicht sinnvoll, sie zuerst zu deployen.

Wenn Sie darauf bestehen, nutzlose Dateien in das Repository zu kopieren, müssen Sie deploy:deploy-file (see the docs) verwenden, um eine Datei manuell bereitzustellen und das Plug-in mit einer Ausführung zu konfigurieren, um es während des Release-Schritts aufzurufen. Aber ich rate trotzdem davon ab.

Was Sie wahrscheinlich suchen, ist eine Möglichkeit, eine Assembly irgendwo automatisch hochzuladen. Mir ist kein Plugin bekannt, das dies tut.

+0

Thx der Lage sein, das war die Art, wie ich auf im Moment war, obwohl ich habe es nicht bekam gerade jetzt arbeiten. Aber nach allen Informationen, die ich gefunden habe, scheint das der (einzige?) Weg zu sein, wenn man .tar.gz Dateien in ein Repository hochladen will. –

+0

Es ist nicht das einzige Werkzeug, ein Repository zu verwenden, um unnötige Dateien in den Repo - maten zu kopieren. * .tar.gz-Dateien werden von vielen anderen Verpackungswerkzeugen verwendet, z. apt, puppet usw. – Adam

+0

@Adam, aber diese Tools haben ihre eigenen Repositories und können oft keine Maven-Repositories verwenden. Es wäre also sinnvoll, zu einem Puppet Repo, aber nicht zu einem Maven Repo hochzuladen. –