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.