Maven:如何从命令行激活配置文件?


79

这是我的pom.xml的片段。我尝试了以下操作,但未激活配置文件。

mvn clean install -Pdev1
mvn clean install -P dev1

当我尝试时,mvn help:active-profiles没有任何配置文件被列为活动状态。如果我设置<activeByDefault>dev1true,并运行 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

Answers:


87

这两个命令都是正确的:

mvn clean install -Pdev1
mvn clean install -P dev1

问题很可能不是概要文件激活,而是概要文件未达到您的预期

该命令是正常的:

mvn help:active-profiles

不显示配置文件,因为不含-Pdev1。您可以添加它以使配置文件显示,但是这将毫无意义,因为您将测试Maven本身。

您应该做的是通过执行以下操作来检查配置文件行为

  1. 在配置文件配置中设置activeByDefaulttrue
  2. 运行mvn help:active-profiles(以确保即使没有-Pdev1)也可以有效地激活它,
  3. 运行mvn install

它应该提供与以前相同的结果,因此请确认问题出在配置文件未按预期执行。


1
是的,当我将activeByDefault设置为true时,它显示在mvn help:active-profiles下。但是执行mvn clean install -Pdev1不会激活配置文件。
indolent

13

通过系统属性激活可以如下进行

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

并使用-D运行mvn build来设置系统属性

mvn clean install -Dfoo=bar

此方法还有助于选择项目工件的传递依赖中的概要文件。


就我而言,属性不能替换* .properties中的占位符,请您查看一下stackoverflow.com/questions/51186963/…–
vikramvi

9

我遇到了这个问题,我-DprofileIdEnabled=true在运行mvn cli命令时通过添加参数解决了上述问题。

请运行MVN CLI命令:mvn clean install -Pdev1 -DprofileIdEnabled=true

除了此解决方案之外,您无需删除前面提到的POM中的activeByDefault设置。

我希望这个答案能解决您的问题。


有人可能也想跳过测试以更快地构建mvn clean install -Prelease -DprofileIdEnabled = true -DskipTests
Yeasin Ar Rahman

4

只需删除激活部分,我不知道为什么-Pdev1不会覆盖默认的错误激活。但是,如果您忽略了这一点:

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

那么只有在明确声明为-Pdev1后,您的配置文件才会被激活

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.