¿Cómo implementar SNAPSHOT con fuentes y JavaDoc?

92

Quiero implementar fuentes y javadocs con mis instantáneas. Esto significa que quiero automatizar el siguiente comando:

mvn clean source:jar javadoc:jar deploy

Solo para ejecutar:

mvn clean deploy

No quiero que se ejecute la generación de javadoc / sources durante la installfase (es decir, compilaciones locales).

Sé que los complementos de fuente / javadoc se pueden sincronizar con la ejecución del releasecomplemento, pero no puedo averiguar cómo conectarlo a las versiones de instantáneas.

Henryk Konsek
fuente

Respuestas:

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 el POM principal OSS de Sonatype para ver un ejemplo completo.

sfussenegger
fuente
1
Estoy usando esta configuración y funciona bastante bien. Sin embargo, tuve dos pequeños problemas: uno, las fuentes generadas no están incluidas en el objetivo "jar", necesitará "jar-no-fork". Dos, hay un error en el complemento de lanzamiento que hará que se generen las fuentes de lanzamiento dos veces (y, por lo tanto, se implementen dos veces, lo que generará problemas con los administradores de repositorios)
mglauche
1
maven-source-plugin:jarse adjunta a la packagefase de forma predeterminada, por lo que puede dejarla <phase>verify</phase>y lograr lo mismo. Además, no estoy seguro de por qué adjuntaría esto para verificar de todos modos, ya que esa fase está destinada a "empaquetar el proyecto y ejecutar pruebas de integración".
Matt b
@mglauche @matt gracias por tus comentarios. Acabo de hacer los cambios apropiados.
sfussenegger
1
@Henryk Ok, he agregado explícitamente maven-deploy-plugin, así como maven parece (o intenta) para garantizar la ejecución en el estado en que los complementos están definidos en el POM. Sin embargo, podría requerir algo de experimentación.
sfussenegger
1
el uso de una identificación aleatoria crea una nueva ejecución. Pensé que querría "reasignar" la ejecución predeterminada
Hurda
48

Solo para agregar una alternativa que no requiera que modifiques la configuración del complemento:

mvn -DperformRelease=true [goals]

El crédito va a mcbeelen de http://sea36.blogspot.com/2009/02/attaching-javadocs-and-sources-to-maven.html?showComment=1314177874102#c6853460758692768998

Dan
fuente
4
Me gustaría mencionar que esta característica podría desaparecer en una versión futura de Maven (¿posiblemente Maven-4?). Consulte el comentario aquí en la sección de perfil de Maven Super POM: maven.apache.org/ref/3.1.1/maven-model-builder/super-pom.html
Dan
45

El artículo al que se refiere Dan también menciona otro enfoque que funciona sin modificar poms Y no desaparecerá pronto:

mvn clean javadoc: jar source: jar install

Que funciona bien con Maven 3+, junto con ...

mvn clean javadoc: jar source: jar deploy

Que he probado desde la implementación de Jenkins en Nexus.

Este enfoque fue bueno porque solo tuve que modificar algunos trabajos de Jenkins y no tuve que meterme con mis pompones.

HDave
fuente
5
¡Gracias por una solución sin pompones! Tenga en cuenta que javadoc: jar y / o source: jar deben aparecer antes de la instalación o implementación , o los archivos jar adicionales no se "adjuntarán" a la implementación.
seanf
2
FWIW estas opciones también funcionan con package:mvn clean javadoc:jar source:jar package
ecoe
Esta es la buena respuesta, ya que le dice el comando exacto para construir y cargar fuentes y javadoc a su repositorio.
russellhoff