2012-04-15 8 views
7

Estoy utilizando la opción de configuración preparationGoals del complemento de lanzamiento Maven para transformar archivos adicionales para reflejar la versión del proyecto que se está lanzando. Esto funciona maravillosamente.Maven Release Perform Commit Additional Files

El problema es que cuando la ejecución de la confirmación, el plugin especifica explícitamente que sólo los archivos pom.xml deben incluirse dejando así mis otros archivos uncommited:

[INFO] Executing: /bin/sh -c cd /Users/jw/dev/Test && git commit --verbose -F /var/folders/w0/hr1h_7h50f3_pwd_nrk9l808000195/T/maven-scm-114713951.commit pom.xml library/pom.xml sample/pom.xml

¿Hay alguna manera para mí para anular este comportamiento y especificar archivos adicionales o globs para incluir en la confirmación?

(también necesito este comportamiento para el completionGoals, así que he configurado para hacer que la misma transformación)

+0

Qué archivos deben representar la versión de su lanzamiento? – khmarbaise

+0

Según [el documento del complemento de maven-release] (http://maven.apache.org/plugins/maven-release-plugin/examples/prepare-release.html), solo ** Confirma los POM modificados **. – yorkw

Respuesta

4

Podría utilizar el maven-scm-plugin? Agregue una ejecución de complemento ejecutando el objetivo scm:checkin para confirmar los archivos que desea. Vincúlela a una fase que se ejecutará cuando se ejecute preparationGoals (si especificó una o más fases como el valor para ese elemento) o incluya el objetivo scm:checkin en preparationGoals directamente.

+0

+1 Esta es probablemente la única solución en este momento, la desventaja es que puede causar problemas si la reversión se realiza más tarde, como se menciona en [este análisis similar de SO] (http://stackoverflow.com/questions/10583434/commit- some-files-while-maven-releaseprepare). – yorkw

+0

¿Alguien tiene un ejemplo de esto funcionando? – Christopher

+0

Pude hacer que funcionara para un solo archivo, pero no para múltiples. Funciona cuando se ejecuta manualmente, pero no cuando lo coloco en los objetivos de preparación, con una lista separada por comas. – Christopher

0

Parece que no permitir la especificación de archivos de etiquetas adicionales es en realidad un error en Maven. En la línea 130 en la clase org.apache.maven.shared.release.phase.AbstractScmCommitPhase del complemento de versión de Maven, hay referencias a un indicador "commitByProject" introducido por primera vez en Maven 2.0-beta-7.

Una rama se usa para determinar el mecanismo por el cual se agregan los archivos a la versión de Maven: prepare commit. El complemento de SCM se carga con los archivos antes de la confirmación utilizando el SCMFileSet class. Una de las instancias de rama de esa clase puede haber estado intentando agregar todos los archivos en el directorio base, pero no funciona de esa manera en SCM.

Este es un punto donde se podría implementar una solución para tomar una lista de archivos o para agregar un directorio de archivos para confirmar.

En pocas palabras, después de sumergirse profundamente en una ejecución de depuración del complemento de versión de Maven, invoca el complemento SCM para agregar solo los POM de los repositorios. Cambiar el indicador "commitByProject" mal documentado no tiene ningún impacto en los resultados con respecto a qué archivos se agregan al commit de SCM.

0

También necesito confirmar algunos archivos adicionales (modificados por el plugin Maven Replacer).Lo hice de la siguiente manera:

Primero configuré Maven Release plugin para ejecutar objetivos adicionales:

<plugin> 
    <artifactId>maven-release-plugin</artifactId> 
    <version>2.5.3</version> 
    <configuration> 
     <preparationGoals>-Prelease -DreplacerVersion="${releaseVersion}" clean replacer:replace scm:checkin verify</preparationGoals> 
     <completionGoals>-Prelease -DreplacerVersion="${developmentVersion}" clean replacer:replace scm:checkin verify</completionGoals> 
    </configuration> 
</plugin> 
  • release perfil define la configuración de Maven SMC complemento
  • replacerVersion argumento es utilizado por Maven Sustituto plugin para establecer la versión correcta en algunos archivos
  • clean es un objetivo estándar ejecutado por el complemento Maven Release (predeterminado: clean verify)
  • replacer:replace objetivo es responsable de la modificación de archivos
  • scm:checkin lo compromete y empuje
  • verify es un objetivo estándar dirigido por el plugin de Maven de lanzamiento (por defecto: clean verify)

siguiente que configura Maven Replacer plugin:

<plugin> 
    <groupId>com.google.code.maven-replacer-plugin</groupId> 
    <artifactId>replacer</artifactId> 
    <version>1.5.3</version> 
    <configuration> 
     <includes> 
      <include>${basedir}/file1.txt</include> 
      <include>${basedir}/file2.txt</include> 
     </includes> 
     <replacements> 
      <replacement> 
       <token><![CDATA[<pattern>.*</pattern>]]></token> 
       <value><![CDATA[<pattern>${replacerVersion}</pattern>]]></value> 
      </replacement> 
     <replacement> 
    </configuration> 
</plugin> 

${replacerVersion} permite utilizar la misma configuración para cambiar de un desarrollo para un lanzamiento y luego del lanzamiento a una próxima versión de desarrollo.

Finalmente he definido la versión de Maven SCM plugin quiero usar:

<plugin> 
    <artifactId>maven-scm-plugin</artifactId> 
    <version>1.9.5</version> 
</plugin> 

y configuración en el perfil release (he definido en el perfil para evitar que compromete accidentales durante no liberación de construcción):

<profile> 
    <id>release</id> 
    <build> 
     <pluginManagement> 
      <plugins> 
       <plugin> 
        <artifactId>maven-scm-plugin</artifactId> 
        <configuration> 
         <message>[maven-scm-plugin] set ${replacerVersion} version in files</message> 
         <includes>file1.txt, file2.txt</includes> 
        </configuration> 
       </plugin> 
      </plugins> 
     </pluginManagement> 
    </build> 
</profile> 

Gracias a que después de la ejecución de un comando:

mvn release:prepare -DdevelopmentVersion=1.2.1-SNAPSHOT -DreleaseVersion=1.2.0 -Dtag=1.2.0 

veo 4 se compromete:

  1. [maven-SMC-plugin] configurar la versión 1.2.0 de archivos
  2. [experto de liberación-plugin] preparar liberar 1.2.0
  3. [maven-SCM- plugin] configurar la versión 1.2.1-SNAPSHOT en archivos
  4. [experto de liberación-plugin] prepararse para la próxima iteración de desarrollo
Cuestiones relacionadas