Comment déployer SNAPSHOT avec des sources et JavaDoc?

92

Je souhaite déployer des sources et des javadocs avec mes instantanés. Cela signifie que je souhaite 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 javadoc / sources soit exécutée pendant la installphase (c'est-à-dire les builds locaux).

Je sais que les plugins source / javadoc peuvent être synchronisés avec l'exécution du releaseplugin mais je ne peux pas comprendre comment le câbler aux versions d'instantanés.

Henryk Konsek
la source

Réponses:

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>

Voir le POM parent OSS de Sonatype pour un exemple complet.

sfussenegger
la source
1
J'utilise cette configuration et cela fonctionne très bien. Cependant, j'ai eu deux petits problèmes: premièrement, les sources générées ne sont pas incluses dans l'objectif "jar", vous aurez besoin de "jar-no-fork". Deuxièmement, il y a un bug dans le plugin de release qui va provoquer la génération des sources de release deux fois (et donc déploeyed deux fois, ce qui entraînera des problèmes avec les gestionnaires de référentiels)
mglauche
1
maven-source-plugin:jars'attache à la packagephase par défaut, vous pouvez donc quitter <phase>verify</phase>et accomplir la même chose. En outre, je ne sais pas pourquoi vous attacheriez ceci pour vérifier de toute façon car cette phase est destinée à "empaqueter le projet et exécuter des tests d'intégration".
matt b
@mglauche @matt merci pour vos commentaires. Je viens de faire les changements appropriés.
sfussenegger
1
@Henryk Ok, j'ai explicitement ajouté maven-deploy-plugin ainsi que maven semble (ou essaie) de garantir l'exécution dans l'ordre où les plugins sont définis dans le POM. Cela pourrait cependant nécessiter quelques expériences.
sfussenegger le
1
l'utilisation d'un identifiant aléatoire crée une nouvelle exécution Je pensais que vous voudriez "remapper" l'exécution par défaut
Hurda
48

Juste pour ajouter une alternative qui ne vous oblige pas à vous soucier de la configuration du plugin:

mvn -DperformRelease=true [goals]

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

Dan
la source
4
Je tiens à 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 du Maven Super POM: maven.apache.org/ref/3.1.1/maven-model-builder/super-pom.html
Dan
45

L'article mentionné par Dan mentionne également une autre approche qui fonctionne sans modifier les poms ET ne disparaîtra pas de sitôt:

mvn clean javadoc: jar source: jar install

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

mvn clean javadoc: jar source: jar deploy

Ce que j'ai testé à partir de Jenkins déployant sur Nexus.

Cette approche était agréable car je n'avais qu'à modifier certains travaux Jenkins et je n'avais pas besoin de jouer avec mes poms.

HDave
la source
5
Merci pour une solution sans pom! Notez que javadoc: jar et / ou source: jar doivent apparaître avant l' installation ou déploiement , sinon les fichiers JAR supplémentaires ne seront pas "attachés" au déploiement.
seanf
2
FWIW ces options fonctionnent également avec package:mvn clean javadoc:jar source:jar package
ecoe
C'est la bonne réponse, car elle vous indique la commande exacte pour créer et télécharger des sources et javadoc dans votre dépôt.
russellhoff