2009-05-22 11 views
50

Tengo un Maven pom.xml con un complemento que deseo poder controlar en la línea de comandos. Todo funciona por lo demás bien, excepto incluso después de buscar en la red un tiempo que no puedo encontrar la manera de establecer un valor predeterminado para mi propiedad de control:Configuración de valores predeterminados para las propiedades personalizadas de Maven 2

<plugin> 
    ... 
    <configuration> 
     <param>${myProperty}</param> 
    </configuration> 
    ... 
</plugin> 

Así que si me quedo con Maven

mvn -DmyProperty=something ... 

todo está bien, pero me gustaría tener un valor específico asignado a myProperty también sin el interruptor -DmyProperty=.... ¿Cómo puede hacerse esto?

Respuesta

43

Pregunta anterior, pero creo que la respuesta más simple no está allí. Puede tener el valor predeterminado de la propiedad definido en <build>/<properties> o en un perfil como se muestra a continuación. Cuando proporcione el valor de la propiedad en la línea de comando con -DmyProperty=anotherValue, anulará la definición del POM. Espero haber sido capaz de explicar ..

<profile> 
    ... 
    <properties> 
     <myProperty>defaultValue</myProperty>    
    </properties> 
    ... 
     <configuration> 
      <param>${myProperty}</param> 
     </configuration> 
    ... 
</profile> 
1

Esto podría funcionar para usted:

<profiles> 
    <profile> 
    <id>default</id> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
    <build> 
    <plugin> 
     <configuration> 
     <param>Foo</param> 
     </configuration> 
    </plugin> 
    </build> 
    ... 
    </profile> 
    <profile> 
    <id>notdefault</id> 
    ... 
    <build> 
     <plugin> 
     <configuration> 
      <param>${myProperty}</param> 
     </configuration> 
    </plugin> 
    </build> 
    ... 
    </profile> 
</profiles> 

De esa manera,

mvn clean utilizará "foo" como parámetro por defecto. En los casos cuando es necesario reemplazar, utilice mvn -P notdefault -DmyProperty=something

+1

¿No podría simplificarse un poco mediante el uso de un bloque de activación para activar NODEFAULT menos que ninguna propiedad -D fue aprobada en todas. – djangofan

+0

@djangofan tienes razón. Estaba tratando de hacer que mi respuesta sea una gota en reemplazo de la pregunta. – sal

25

Usted podría utilizar algo como a continuación:

<profile> 
    <id>default</id> 
    <properties> 
     <env>default</env> 
     <myProperty>someValue</myProperty>    
    </properties> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
</profile> 
+0

Correcto, eso lo hizo, gracias! –

+0

Genial. No hay problema. –

30

enfoque de Taylor L's funciona bien, pero no es necesario el perfil extra. Puede declarar valores de propiedad en el archivo POM.

<project> 
    ... 
    <properties> 
    <!-- Sets the location that Apache Cargo will use to install containers when they are downloaded. 
     Executions of the plug-in should append the container name and version to this path. 
     E.g. apache-tomcat-5.5.20 --> 
    <cargo.container.install.dir>${user.home}/.m2/cargo/containers</cargo.container.install.dir> 
    </properties> 
</project> 

También puede establecer las propiedades en su settings.xml usuario en el caso de que desea que cada usuario sea capaz de establecer sus propios valores por defecto. Utilizamos este enfoque para ocultar las credenciales que el servidor de CI utiliza para algunos complementos de desarrolladores habituales.

2

solución akostadinov funciona muy bien para el uso común ... Pero si la propiedad deseada será utilizado por los componentes del reactor durante la fase de resolución de dependencias (muy temprano en el procesamiento de la jerarquía mvn pom. ..) debe utilizar el mecanismo de prueba de perfil "none activation" para garantizar que el valor proporcionado de la línea de comando opcional siempre se priorice con respecto al valor proporcionado dentro de pom.xml. Y esto sea lo que sea profundo es tu jerarquía pom.

Para ello, agregue este tipo de perfil en su pom.xml padres:

<profiles> 
    <profile> 
     <id>my.property</id> 
     <activation> 
     <property> 
      <name>!my.property</name> 
     </property> 
     </activation> 
     <properties> 
     <my.property>${an.other.property} or a_static_value</my.property>    
     </properties> 
    </profile> 
    </profiles> 
+1

¿Podría mostrar un pom de ejemplo donde '' -D' no funciona? – akostadinov

Cuestiones relacionadas