2010-07-20 23 views
8

Estoy usando dos perfiles: desarrollo y producción.maven release plugin ignores releaseProfile

El desarrollo debe estar activo por defecto; la producción se debe usar cuando estoy lanzando.

En mi pom.xml que tengo:

[...] 
<plugin> 
<artifactId>maven-release-plugin</artifactId> 
<version>2.0-beta-9</version> 
<configuration> 
    <useReleaseProfile>false</useReleaseProfile> 
    <goals>deploy</goals> 
    <arguments>-Pproduction</arguments> 
</configuration> 
</plugin> 
[...] 
<profiles> 
    <profile> 
    <id>production</id> 
    <properties> 
     <profile.name>production</profile.name> 
    </properties> 
    [...] 
    </profile> 
    <profile> 
    <id>development</id> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
    <properties> 
    <profile.name>development</profile.name> 
    </properties> 
     [...] 
    </profile> 
[...] 

Simplemente no funciona.
useReleaseProfiles tampoco funciona: http://jira.codehaus.org/browse/MRELEASE-459

El perfil de desarrollo debe estar siempre activo, pero no cuando se ejecuta mvn release:perform. ¿Cómo se logra esto?

[ACTUALIZACIÓN]: he visto con la bandera de depuración que se utiliza perfil de producción, pero el perfil de desarrollo se utiliza también, porque es activeByDefault. Esto no puede ser anulado por el argumento releaseProfile. Sería bueno forzar que el complemento de publicación use solo el perfil de "producción".

Respuesta

13

El maven-release-plugindocumentation fomenta mediante el parámetro de configuración releaseProfiles para invocar automáticamente perfiles durante el proceso de liberación.

Este es un mejor enfoque que invocar manualmente los perfiles de lanzamiento desde la línea de comandos. Una de las razones es que los perfiles utilizados en la versión se documentarán en el pom.xml y se almacenarán con el código etiquetado. Esto hace que el proceso de compilación sea más fácil de entender y más fácil de repetir más tarde, exactamente de la misma manera en que se lanzó originalmente el proyecto.

Si usa maven-release-plugin anterior a 2.4 vea esto bug que impide el uso del parámetro mencionado anteriormente.

Tenga en cuenta que en el caso de un proyecto de varios módulos, tendrá que poner la configuración "releaseProfiles" en la raíz pom! Consulte también this issue para obtener más información al respecto.

+1

@editor, es mejor escribir que el error se ha corregido, aquí, como un comentario. – Arun

+0

@Leif ¡Gracias por la actualización sobre esta corrección de errores! – devdanke

+0

Incluso con 2.5.1 Todavía tengo que especificar mi perfil manualmente '-Prelease' en la CLI. –

2

Creo que deberías simplemente activar tus perfiles a través de una propiedad.

<profiles> 
    <profile> 
    <id>production</id> 
    <activation> 
     <property> 
     <name>build</name> 
     <value>release</value> 
     </property> 
    </activation> 
    [...] 
    </profile> 
    <profile> 
    <id>development</id> 
    <activation> 
     <property> 
     <name>build</name> 
     <value>develop</value> 
     </property> 
    </activation> 
    [...] 
    </profile> 
<profiles> 

Haga su construye mediante la ejecución de algo como esto

mvn -Dbuild=develop package 
mvn -Dbuild=develop test 

mvn -Dbuild=release release:prepare 
mvn -Dbuild=release release:perform 
+0

sí, yo ya sabía que es posible ajustar el perfil de esta manera. Pero de esta manera puede ser forgotton.Si lo olvida, el paquete liberado contendría archivos de configuración incorrectos y la implementación fallaría. Me gustaría aplicar el complemento de publicación para usar solo el perfil dado. – Janning

+0

No se puede olvidar si define algunas propiedades en los perfiles que son necesarios y utilizados por el complemento de publicación. – splash

+0

No entiendo tu último comentario. ¿Podrías explicarme por favor? – Janning

0

Esta es una publicación muy antigua, pero me encontré con este problema bastante recientemente. El releaseProfile solo funcionó para mí cuando configuré los perfiles de lanzamiento en el perfil llamado , versión. Cualquier otro perfil da el mismo error.

Código de ejemplo:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-release-plugin</artifactId> 
      <version>2.5.3</version> 
      <configuration> 
       <tagNameFormat>@{project.artifactId}[email protected]{project.version}</tagNameFormat> 
       <autoVersionSubmodules>true</autoVersionSubmodules> 
       <releaseProfiles>release</releaseProfiles> 
       <allowTimestampedSnapshots>true</allowTimestampedSnapshots> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<profiles> 
    <profile> 
     <id>release</id> 
     <properties> 
      <connectionUrl>${scm-base}/tags/${project.artifactId}-${project.version}</connectionUrl> 
     </properties> 
    </profile> 
</profiles>