Come distribuire SNAPSHOT con sorgenti e JavaDoc?


92

Voglio distribuire sorgenti e javadoc con le mie istantanee. Ciò significa che voglio automatizzare il seguente comando:

mvn clean source:jar javadoc:jar deploy

Solo per eseguire:

mvn clean deploy

Non voglio che la generazione di javadoc / sources venga eseguita durante la installfase (cioè build locali).

So che i plugin source / javadoc possono essere sincronizzati con l'esecuzione del releaseplugin ma non riesco a capire come collegarlo alle release delle istantanee.

Risposte:


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>

Vedere POM genitore OSS di Sonatype per un esempio completo.


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

1
maven-source-plugin:jarsi attacca alla packagefase per impostazione predefinita, quindi puoi interrompere <phase>verify</phase>e ottenere la stessa cosa. Inoltre non sono sicuro del motivo per cui dovresti allegare questo per verificare comunque, poiché quella fase è intesa per "impacchettare il progetto ed eseguire test di integrazione".
— matt b

@mglauche @matt grazie per i tuoi commenti. Ho appena apportato le modifiche appropriate.
— sfussenegger

1
@Henryk Ok, ho aggiunto esplicitamente maven-deploy-plugin e maven sembra (o prova) per garantire l'esecuzione nel caso in cui i plugin siano definiti nel POM. Potrebbe richiedere alcuni esperimenti però.
— sfussenegger

1
l'utilizzo di un id casuale crea una nuova esecuzione Ho pensato che avresti voluto "rimappare" quella predefinita di esecuzione
— Hurda

48

Solo per aggiungere un'alternativa che non richiede di confondere con la configurazione del plugin:

mvn -DperformRelease=true [goals]

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


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

45

L'articolo a cui fa riferimento Dan menziona anche un altro approccio che funziona senza modificare i poms E non scomparirà presto:

mvn clean javadoc: jar source: jar install

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

mvn clean javadoc: jar origine: jar deploy

Che ho testato da Jenkins durante la distribuzione su Nexus.

Questo approccio era carino perché dovevo solo modificare alcuni lavori di Jenkins e non avevo bisogno di scherzare con i miei poms.


5
Grazie per una soluzione senza pom! Nota che javadoc: jar e / o source: jar devono apparire prima dell'installazione o del deploy , altrimenti i jars extra non saranno "collegati" alla distribuzione.
— seanf

2
FWIW queste opzioni funzionano anche con package:mvn clean javadoc:jar source:jar package
— ecoe

Questa è la buona risposta, poiché ti dice il comando esatto per creare e caricare sorgenti e javadoc nel tuo repository.
— russellhoff
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.