2011-04-15 12 views
20

estoy tratando de activar un perfil experto en el uso de una propiedad definida en el interior pom.xml:¿Cómo activar el perfil a través de la propiedad maven?

<project> 
    [...] 
    <properties> 
    <run.it>true</run.it> 
    </properties> 
    [...] 
    <profiles> 
    <profile> 
     <activation> 
     <property><name>run.it</name></property> 
     </activation> 
     [...] 
    </profile> 
    </profiles> 
    [...] 
</project> 

Al parecer no funciona. Sin embargo, la activación funciona desde la línea de comando:

mvn -Drun.it 

¿Es "de diseño"? Si es así, ¿qué es una posible solución?

+0

He aquí una solución: http://stackoverflow.com/a/14386303/290918 – kldavis4

+0

He creado una solicitud de función que agregaría la etiqueta '' de 'settings.xml' a' pom.xml' para que pueda definir los perfiles que desea activar. https://issues.apache.org/jira/browse/MNG-6000 – flungo

Respuesta

22

Editar, completar la reescritura, ya que entiendo la pregunta ahora.

Ver this forum post:

activación de perfil se basa en SISTEMA propiedades. no podrá activar los perfiles basados ​​en las propiedades definidas en su pom no podrá activar perfiles basados ​​en las propiedades del sistema definidos después de que el plan de de construcción ha comenzado la ejecución

+0

¿Podría volver a consultar la pregunta? Estoy intentando activar el perfil con una propiedad definida dentro de 'pom.xml', no en la línea de comando. – yegor256

+0

de hecho me lo perdí, vea activeByDefault como M. Jessup dijo – moritz

+0

He cambiado mi respuesta – moritz

-3

Creo que su pregunta es similar a éste.

Activation of maven profile based on multiple properties

Como se ha mencionado, se puede activar un perfil y configurar distintas propiedades como por su exigencia y el uso de comandos para configurar mvn -Prun-it propiedad en true.

<project> 
    [...] 

    [...] 
    <profiles> 
    <profile> 
    <id>don't-run</id> 
<properties> 
    <run.it>false</run.it> 
    </properties> 


     [...] 
    </profile> 


    <profile> 
    <id>run-it</id> 
<properties> 
    <run.it>true</run.it> 
    </properties> 

     [...] 
    </profile> 


    </profiles> 
    [...] 
</project> 
+1

Sírvanse revisar mi pregunta. Me interesa activar/desactivar el perfil desde dentro de 'pom.xml', no desde la línea de comandos o' settings.xml'. – yegor256

+0

Pero, ¿cómo te hace alguna diferencia, puedes elaborarlo por favor? Además, como menciona Moritz, la activación se realiza en función de la propiedad del sistema y no de la línea de comandos. Ver esta referencia http://maven.apache.org/guides/introduction/introduction-to-profiles.html – Prabhjot

-2

Como se explicó Moritz Heuser, la activación perfil se basa en sistema propiedades. Sin embargo, se puede tratar algo así:

<project> 
    ... 
    <properties> 
    <run.it>true</run.it> 
    </properties> 
    ... 
    <profiles> 
    <profile> 
     <activation> 
     <activeByDefault>${run.it}</activeByDefault> 
     </activation> 
     ... 
    </profile> 
    </profiles> 
    ... 
</project> 

La idea es definir la bandera activeByDefault en el <properties>.

+1

No veo cómo esto ayuda. La definición de run.it en el pom es demasiado tarde para que el perfil surta efecto. Según https://jira.codehaus.org/browse/MNG-5235 –

+0

Estoy de acuerdo. Existe un problema clásico de la gallina y el huevo: los perfiles de mi naturaleza pueden definir otras propiedades. ¿Deberían activar también otros perfiles recursivamente? ¿Qué ocurre si el perfil ya se activó pero la nueva definición de propiedad indica que se desactive? –

+0

Esto no funciona por la misma razón que el ejemplo del OP no funciona (como explica @moritz) – flungo

5

¿Qué pasa con el uso de una activación como esto

<profile> 
     <id>gwt</id> 
     <activation> 
      <file> 
       <exists>uses-gwt.marker</exists> 
      </file> 
     </activation> 

y añadiendo el archivo 'utiliza-gwt.marker' en control de código fuente, justo al lado de pom.xml. Eso le da a todos los desarrolladores el mismo estado y permite un pom orientado a los aspectos. estamos usando esta técnica en el pom padre y colocamos los archivos de marcador en el svn del elemento secundario. No es ideal, pero funciona.

0

Como se mencionó en las respuestas anteriores, la activación del perfil solo funciona con las propiedades del sistema.

Pero, con un poco de creatividad puede lograr un resultado similar (ejecución de complemento condicional) usando propiedades pom. Para ello, utilice la etiqueta fase del complemento que desea ejecutar de forma condicional:

<project> 

    ... 

    <properties> 
     <run.it>none</run.it> 
     <!-- <run.it>compile</run.it> --> 
     <!-- <run.it>package</run.it> --> 
    </properties> 

    ... 

    <build> 

     ... 

     <plugins> 
      <plugin> 
      <artifactId>your-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>${run.it}</phase> 
       </execution> 
      </executions> 

      </plugin> 
     </plugins> 

     ... 

    </build> 

</project> 

La única diferencia es que usted tiene que utilizar un nombre de fase en lugar de verdadero/falso. Pero puede cambiar la propiedad o anularla libremente como una propiedad.

Cuestiones relacionadas