Maven: Як активувати профіль із командного рядка?


81

Це фрагмент з мого 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>

Мені цікаво, чому мій профіль не активується. Хтось стикався з подібною проблемою?


Принаймні, з maven 3.5.3 -Pпрацює, як очікувалося ... FWIW ...
rogerdpack

Відповіді:


89

Обидві команди правильні:

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.

Він повинен дати ті самі результати, що й раніше, а отже, підтвердити, що проблема полягає в тому, що профіль не робить того, що ви очікуєте.


1
так, коли я встановлюю для activeByDefault значення true, воно відображається в довідці mvn: active-profile. Але виконання mvn clean install -Pdev1 не активує профіль.
млявий

14

Активація за властивостями системи може бути виконана наступним чином

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

І запустіть mvn build за допомогою -D, щоб встановити системну властивість

mvn clean install -Dfoo=bar

Цей метод також допомагає вибрати профілі в транзитивній залежності артефактів проекту.


У моєму випадку властивість не заміна наповнювачів в * .properties, ви можете порадувати відгук stackoverflow.com/questions/51186963 / ...
vikramvi

11

Я зіткнувся з цією проблемою і вирішив згадану проблему, додавши -DprofileIdEnabled=trueпараметр під час запуску команди mvn cli.

Будь ласка , запустіть МВН Cli команди як: mvn clean install -Pdev1 -DprofileIdEnabled=true.

На додаток до цього рішення, вам не потрібно видаляти activeByDefault параметри у своєму POM, згаданому як попередня відповідь.

Сподіваюся, ця відповідь вирішить вашу проблему.


Хтось може захотіти також пропустити тести для швидшої збірки mvn clean install -Prelease -DprofileIdEnabled = true -DskipTests
Yeasin Ar Rahman

5

Просто видаліть розділ активації, я не знаю, чому -Pdev1 не замінює помилково активацію за замовчуванням. Але якщо пропустити це:

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.