¿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.

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.


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


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.