Maven: ¿Cómo activo un perfil desde la línea de comandos?

81

Este es un fragmento de mi pom.xml. Intenté lo siguiente, pero el perfil no se activó.

mvn clean install -Pdev1
mvn clean install -P dev1

Cuando probé, mvn help:active-profilesningún perfil aparecía como activo. Si fijo <activeByDefault>para dev1a true, y correr mvn help:active-profiles, que me muestra el perfil se activa.

<profile>
        <id>dev1</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                        <systemPropertyVariables>
                            <env>local</env>
                            <properties.file>src/test/resources/dev1.properties</properties.file>
                        </systemPropertyVariables>
                        <suiteXmlFiles>
                            <suiteXmlFile>src/test/resources/dev1.testng.xml</suiteXmlFile>
                        </suiteXmlFiles>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
    <profile>
        <id>dev2</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                        <systemPropertyVariables>
                            <env>local</env>
                            <properties.file>src/test/resources/dev2.properties</properties.file>
                        </systemPropertyVariables>
                        <suiteXmlFiles>
                            <suiteXmlFile>src/test/resources/dev2.testng.xml</suiteXmlFile>
                        </suiteXmlFiles>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>

Me pregunto por qué no se activa mi perfil. ¿Alguien ha encontrado un problema similar?

indolente
fuente
Al menos con maven 3.5.3 -Pfunciona como se esperaba ... FWIW ...
rogerdpack

Respuestas:

89

Ambos comandos son correctos:

mvn clean install -Pdev1
mvn clean install -P dev1

Lo más probable es que el problema no sea la activación del perfil, sino que el perfil no logre lo que espera .

Es normal que el comando:

mvn help:active-profiles

no muestra el perfil, porque no contiene -Pdev1. Podría agregarlo para que aparezca el perfil, pero no tendría sentido porque estaría probando maven.

Lo que debe hacer es verificar el comportamiento del perfil haciendo lo siguiente:

  1. establecido activeByDefaulten trueen la configuración del perfil,
  2. ejecutar mvn help:active-profiles(para asegurarse de que esté efectivamente activado incluso sin -Pdev1),
  3. correr mvn install.

Debería dar los mismos resultados que antes y, por lo tanto, confirmar que el problema es que el perfil no está haciendo lo que espera.

kgautron
fuente
1
sí, cuando configuro activeByDefault en verdadero, se muestra en mvn help: active-profiles. Pero la ejecución de mvn clean install -Pdev1 no activa el perfil.
indolente
14

La activación por propiedades del sistema se puede realizar de la siguiente manera

<activation>
    <property>
        <name>foo</name>
        <value>bar</value>
    </property>
</activation>

Y ejecute mvn build con -D para establecer la propiedad del sistema

mvn clean install -Dfoo=bar

Este método también ayuda a seleccionar perfiles en dependencia transitiva de los artefactos del proyecto.

koios
fuente
En mi caso, las propiedades no reemplazan los
marcadores de
11

Encontré este problema y resolví el problema mencionado agregando un -DprofileIdEnabled=trueparámetro mientras ejecutaba el comando mvn cli.

Por favor, ejecute el comando CLI mvn como: mvn clean install -Pdev1 -DprofileIdEnabled=true.

Además de esta solución, no es necesario que elimine la configuración activeByDefault en su POM mencionado como respuesta anterior.

Espero que esta respuesta resuelva tu problema.

serkan kucukbay
fuente
Alguien podría querer omitir las pruebas también para compilaciones más rápidas mvn clean install -Prelease -DprofileIdEnabled = true -DskipTests
Yeasin Ar Rahman
5

Simplemente elimine la sección de activación, no sé por qué -Pdev1 no anula la activación falsa predeterminada. Pero si omite esto:

<activation> <activeByDefault>false</activeByDefault> </activation>

entonces su perfil se activará solo después de una declaración explícita como -Pdev1

Pablo D
fuente