Como implantar SNAPSHOT com fontes e JavaDoc?

92

Eu quero implantar fontes e javadocs com meus instantâneos. Isso significa que desejo automatizar o seguinte comando:

mvn clean source:jar javadoc:jar deploy

Apenas para executar:

mvn clean deploy

Não quero que a geração de javadoc / sources seja executada durante a installfase (ou seja, compilações locais).

Eu sei que os plug-ins source / javadoc podem ser sincronizados com a execução do releaseplug - in, mas não consigo descobrir como conectá-lo aos lançamentos de instantâneos.

Henryk Konsek
fonte

Respostas:

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>

Consulte o OSS pai POM da Sonatype para um exemplo completo.

Sfussenegger
fonte
1
Estou usando essa configuração e funciona muito bem. No entanto, tive dois pequenos problemas: um, as fontes geradas não estão incluídas no objetivo "jar", você precisará de "jar-no-fork". Dois, há um bug no plug-in de lançamento que fará com que as fontes de lançamento sejam geradas duas vezes (e, portanto, deploeyed duas vezes, o que levará a problemas com os gerenciadores de repositório)
mglauche
1
maven-source-plugin:jaranexa à packagefase por padrão, para que você possa interromper <phase>verify</phase>e realizar a mesma coisa. Além disso, não tenho certeza porque você anexaria isso para verificar de qualquer maneira, já que essa fase se destina a "empacotar o projeto e executar testes de integração".
matt b
@mglauche @matt obrigado por seus comentários. Acabei de fazer as alterações adequadas.
sfussenegger
1
@Henryk Ok, eu adicionei explicitamente o maven-deploy-plugin, bem como o maven parece (ou tenta) para garantir a execução no caso de os plug-ins serem definidos no POM. Pode requerer alguns experimentos.
sfussenegger
1
usar id aleatório cria uma nova execução Achei que você gostaria de "remapear" a execução padrão
Hurda,
48

Apenas para adicionar uma alternativa que não exija que você mexa na configuração do plug-in:

mvn -DperformRelease=true [goals]

O crédito vai para mcbeelen em http://sea36.blogspot.com/2009/02/attaching-javadocs-and-sources-to-maven.html?showComment=1314177874102#c6853460758692768998

Dan
fonte
4
Eu gostaria de mencionar que esse recurso pode desaparecer em uma versão futura do Maven (possivelmente Maven-4?). Confira o comentário aqui na seção de perfil do Maven Super POM: maven.apache.org/ref/3.1.1/maven-model-builder/super-pom.html
Dan
45

O artigo referido por Dan também menciona outra abordagem que funciona sem modificar poms E não irá embora tão cedo:

mvn clean javadoc: jar fonte: jar install

Que funciona bem com Maven 3+, junto com ...

mvn clean javadoc: jar fonte: jar deploy

Que testei no Jenkins implantando no Nexus.

Essa abordagem foi boa porque eu só tive que modificar alguns jobs do Jenkins e não precisei mexer nos meus poms.

HDave
fonte
5
Obrigado por uma solução sem pom! Observe que javadoc: jar e / ou source: jar deve aparecer antes da instalação ou implantação , ou os jars extras não serão "anexados" à implantação.
seanf
2
FWIW, essas opções também funcionam com package:mvn clean javadoc:jar source:jar package
ecoe
Esta é uma boa resposta, pois diz a você o comando exato para construir e enviar fontes e javadoc para seu repo.
russellhoff