102 votes

Comment déployer SNAPSHOT avec les sources et JavaDoc ?

Je veux déployer les sources et les javadocs avec mes snapshots. Cela signifie que je veux automatiser la commande suivante :

mvn clean source:jar javadoc:jar deploy

Juste pour exécuter :

mvn clean deploy

Je ne veux pas que la génération de javadoc/sources soit exécutée pendant l'exécution de l'opération. install (c'est-à-dire les constructions locales).

Je sais que les plugins source/javadoc peuvent être synchronisés avec l'exécution de l'application release mais je n'arrive pas à trouver comment le connecter aux versions snapshots.

86voto

sfussenegger Points 16204
<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>

Véase POM parent OSS de Sonatype pour un exemple complet.

2 votes

J'utilise cette configuration, et elle fonctionne très bien. Cependant j'ai eu deux petits problèmes : un, les sources générées ne sont pas incluses dans le but "jar", vous aurez besoin de "jar-no-fork". Deux, il y a un bug dans le plugin release qui fera que les sources de la release seront générées deux fois (et donc deployées deux fois, ce qui entraînera des problèmes avec les gestionnaires de dépôts).

1 votes

maven-source-plugin:jar s'attache à la package par défaut, vous pouvez donc laisser de côté <phase>verify</phase> et accomplir la même chose. De plus, je ne vois pas pourquoi vous rattacheriez cela à la phase de vérification, puisque cette phase est destinée à "emballer le projet et à exécuter les tests d'intégration".

0 votes

@mglauche @matt merci pour vos commentaires. Je viens d'effectuer les changements appropriés.

64voto

HDave Points 6943

L'article mentionné par Dan mentionne également une autre approche qui fonctionne sans modifier les poms ET qui n'est pas prête de disparaître :

mvn clean javadoc:jar source:jar installer

Ce qui fonctionne bien avec Maven 3+, ainsi que...

mvn clean javadoc:jar source:jar déployer

Ce que j'ai testé depuis Jenkins en déployant sur Nexus.

Cette approche était intéressante car je n'ai eu à modifier que quelques tâches Jenkins et je n'ai pas eu besoin de toucher à mes poms.

50voto

Dan Points 518

Juste pour ajouter une alternative qui ne nécessite pas de s'occuper de la configuration des plugins :

mvn -DperformRelease=true [goals]

Le crédit va à mcbeelen de http://sea36.blogspot.com/2009/02/attaching-javadocs-and-sources-to-maven.html?showComment=1314177874102#c6853460758692768998

5 votes

Je voudrais mentionner que cette fonctionnalité pourrait disparaître dans une future version de Maven (peut-être Maven-4 ?). Consultez le commentaire ici dans la section profil de Maven Super POM : maven.apache.org/ref/3.1.1/maven-model-builder/super-pom.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X