Подтвердить что ты не робот

Maven: Как активировать профиль из командной строки?

Это фрагмент из моего pom.xml. Я попробовал следующее, но профиль не был активирован.

mvn clean install -Pdev1
mvn clean install -P dev1

Когда я попробовал mvn help:active-profiles, никакие профили не были указаны как активные. Если я установил <activeByDefault> для dev1 в true и запустил mvn help:active-profiles, он покажет мне, что профиль активирован.

<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>

Мне интересно, почему мой профиль не активируется. Кто-нибудь сталкивался с подобной проблемой?

4b9b3361

Ответ 1

Команды, которые вы использовали:

mvn clean install -Pdev1
mvn clean install -P dev1

оба правильны. Проблема здесь, вероятно, не в об активации профиля, а скорее в том, что профиль не выполняет то, что вы ожидаете.

Команда:

mvn help:active-profiles

не отображать профиль, поскольку он не содержит -Pdev1. Вы можете добавить опцию, чтобы профиль появился, но это было бы бессмысленно (вы бы тестировали сам maven).

Что вы должны сделать, это проверить поведение профиля, выполнив следующие действия:

  1. настроить профиль с activeByDefault установленным на true,
  2. запустить mvn help:active-profiles (чтобы убедиться, что это эффективно активируется даже без -Pdev1),
  3. запустить mvn install.

Он должен давать те же результаты, что и ваши команды, и подтверждать, что проблема в том, что профиль не выполняет то, что вы ожидаете.

Ответ 2

Активация по свойствам системы может быть выполнена следующим образом

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

И запустите mvn-сборку с -D, чтобы установить системное свойство

mvn clean install -Dfoo=bar

Этот метод также помогает выбирать профили в транзитивной зависимости артефактов проекта.

Ответ 3

Я столкнулся с этой проблемой, и я решил упомянутую проблему, добавив параметр -DprofileIdEnabled=true при запуске команды mvn cli.

Пожалуйста, запустите команду mvn cli как: mvn clean install -Pdev1 -DprofileIdEnabled=true.

В дополнение к этому решению вам не нужно удалять настройки activeByDefault в вашем POM, упомянутые в предыдущем ответе.

Я надеюсь, что этот ответ решит вашу проблему.

Ответ 4

Просто удалите раздел активации, я не знаю, почему -Pdev1 не переопределяет ложную активацию по умолчанию. Но если вы опустите это:

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

тогда ваш профиль будет активирован только после явного объявления как -Pdev1