2011-01-18 9 views
74

Voglio distribuire sorgenti e javadocs con le mie istantanee. Questo vuol dire che voglio per automatizzare il seguente comando:Come distribuire SNAPSHOT con sorgenti e JavaDoc?

mvn clean source:jar javadoc:jar deploy 

Giusto per eseguire:

mvn clean deploy 

Non voglio avere generazione javadoc/fonti eseguito durante la fase di install (costruisce cioè locale) .

So che i plug-in source/javadoc possono essere sincronizzati con l'esecuzione del plug-in release ma non riesco a capire come collegarlo alle versioni degli snapshot.

risposta

69
<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> 

Vedere Sonatype's OSS parent POM per un esempio completo.

+0

Sto utilizzando questa configurazione e funziona abbastanza bene. Tuttavia ho avuto due piccoli problemi: uno, le fonti generate non sono incluse nell'obiettivo "jar", avrete bisogno di "jar-no-fork". Due, c'è un bug nel plugin di rilascio che causerà la generazione delle sorgenti di rilascio due volte (e quindi implementato due volte, il che porterà a problemi con i gestori di repository) – mglauche

+1

'maven-source-plugin: jar' si collega al' pacchetto' fase per impostazione predefinita, in modo da poter lasciare ' verificare' e realizzare la stessa cosa. Inoltre non sono sicuro del motivo per cui dovresti allegarlo per verificare comunque come quella fase sia intesa per "impacchettare il progetto ed eseguire test di integrazione". –

+0

@mglauche @matt grazie per i vostri commenti. Ho appena apportato le modifiche appropriate. – sfussenegger

43

Giusto per aggiungere un'alternativa che non richiede di letame con configurazione del plugin:

mvn -DperformRelease=true [goals] 

merito va a mcbeelen da http://sea36.blogspot.com/2009/02/attaching-javadocs-and-sources-to-maven.html?showComment=1314177874102#c6853460758692768998

+3

Vorrei menzionare che questa funzione potrebbe andare via in una versione futura di Maven (forse Maven-4?). Controlla il commento qui nella sezione del profilo di Maven Super POM: http://maven.apache.org/ref/3.1.1/maven-model-builder/super-pom.html – Dan

16

L'articolo a cui si riferisce Dan cita anche un altro approccio che funziona senza modificare pon E non se ne andrà tanto presto:

mvn clean javadoc: fonte vaso: vaso i nstall

che funziona bene con Maven 3+, insieme a ...

mvn clean javadoc: fonte vaso: vaso distribuire

Quale Ho testato da Jenkins distribuzione per Nexus.

Questo approccio è stato piacevole perché ho dovuto solo modificare alcuni lavori Jenkins e non ho avuto bisogno di fare confusione con i miei poms.

+3

Grazie per una soluzione senza pom! Si noti che ** javadoc: jar ** e/o ** source: jar ** devono apparire prima ** install ** o ** deploy **, altrimenti i jar aggiuntivi non saranno "allegati" alla distribuzione . – seanf

+1

Non è esattamente ciò che l'OP ha provato ma non vuole? – peedee

+0

FWIW queste opzioni funzionano anche con 'pacchetto':' mvn clean javadoc: jar source: jar package' – ecoe