2009-01-08 15 views
19

Soy la creación de una acumulación experto, y el servidor de destino debe ser especificado en la línea de comandos como una propiedad (que luego se utiliza para seleccionar el perfil adecuado), por ejemplo¿Puedo forzar a Maven 2 a solicitar que se especifique una propiedad en la línea de comando?

mvn -Denv=test 

me gustaría la construcción para fallar si la propiedad no está establecida, ¿es posible?

Sí, soy un novato de Maven.

EDIT: He visto this link, lo que parece implicar que no es posible, pero no estoy seguro de cuán actualizado está.

Respuesta

25

Todo el mundo está cerca, pero no hay una regla en el ejecutor para comprobar específicamente para una propiedad, no hay perfiles de hormigas o cobardes requiere: http://maven.apache.org/enforcer/enforcer-rules/requireProperty.html

La regla también puede verificar el valor de la propiedad.

+0

Mucho mejor: justo lo que estaba buscando. ¡Gracias! – Hobo

2

Mi primera inclinación sería crear un perfil que esté activo siempre que la propiedad env no esté configurada, y hacer que falle de alguna manera. ¿Quizás podría escribir un Plugin de Maven que pruebe esa propiedad y falle si no está presente?

Alternativamente, probablemente podría probarlo con un script de construcción de antigüedades muy pequeño.

1

Para más detalles sobre la solución alternativa de edbrannin:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.yourcompany</groupId> 
    <artifactId>yourproject</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-antrun-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>checkParam</id> 
      <phase>initialize</phase> 
      <goals><goal>run</goal></goals> 
      <configuration> 
       <tasks> 
       <fail message="'env' property must be set" unless="env"/> 
       </tasks> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

le dará el siguiente resultado:

[INFO] ------------------------------------------------------------------------ 
[ERROR] BUILD ERROR 
[INFO] ------------------------------------------------------------------------ 
[INFO] An Ant BuildException has occured: 'env' property must be set 

mi humilde opinión, la forma más sencilla de hacerlo (el que yo iría para personalmente) .

Incluso se puede controlar un conjunto de valores permitidos usando un anidado <condition> contiene <or> y <equals> etiquetas (ver el manual de Ant: http://ant.apache.org/manual/Tasks/conditions.html)

+0

Esto se puede hacer más directamente con el complemento de enforcer. –

5

tal vez usted podría utilizar una solución tal: en Maven se puede activar un perfil si alguna propiedad no está configurada:

<project> 
... 
    <profiles> 
     <profile> 
      <id>failure_profile</id> 
      <activation> 
       <property> 
        <name>!env</name> 
       </property> 
      </activation> 
     </profile> 
    </profiles> 
</project> 

Entonces deberá forzar que este perfil siempre falle, por ejemplo utilizando Maven-ejecutor-plugin:

<profile> 
    <id>failure_profile</id> 
    ... 
    <build> 
     <plugins> 
      <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-enforcer-plugin</artifactId> 
      <executions> 
       <execution> 
       <id>enforce</id> 
       <goals> 
        <goal>enforce</goal> 
       </goals> 
       <configuration> 
        <rules> 
        <AlwaysFail/> 
        </rules> 
        <fail>true</fail> 
       </configuration> 
       </execution> 
      </executions> 
      </plugin> 
     </plugins> 
     </build> 
</profile> 

Si no proporcionan acumulación -Denv entonces fallar:

[INFO] [enforcer:enforce {execution: enforce}] 
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.AlwaysFail failed with message: 
Always fails! 
[INFO] --------------------------------------------------------- 
[ERROR] BUILD ERROR 

Bueno, es mucho más detallada a continuación, hormiga, pero pura Maven :)

+0

Excelente; muchas gracias. Como dices, es mucho más detallado, así que me quedaré con la respuesta de Olivier como mi respuesta aceptada. Eso me resta decir que me gustaría una respuesta pura de Maven, disculpas. Ojalá pudiera aceptar dos respuestas. – Hobo

Cuestiones relacionadas