【问题标题】:Activating Maven profile using system properties使用系统属性激活 Maven 配置文件
【发布时间】:2017-10-11 04:47:18
【问题描述】:

我正在开发一个项目,该项目使用 Maven 配置文件来区分特定于环境的配置。我正在运行版本 3.0.5。目标是能够通过将系统属性传递给与激活属性相对应的 shell 的初始运行命令来指定环境,如下所示:

pom.xml

<profiles>
   ...
    <profile><!-- Local Dev Environment -->
        <id>local</id>
        <activation>
            <property>
                <name>environment</name>
                <value>local</value>
            </property>
        </activation>
        <properties>
            ...
        </properties>
    </profile><!-- End Local Dev Environment -->
    ...
</profiles>

启动命令

mvn exec:java -Denvironment=local

但是,配置文件未激活(使用help:active-profiles 确认,不会产生任何输出)。我对 Maven 很陌生,但这不应该吗?

据我了解,使用-D 选项运行mvn 允许我设置系统属性(在这种情况下:environment 应该等于local)然后交叉引用在运行应用程序时使用 Maven 的 POM 确定满足哪个配置文件的激活条件(根据所需的activation properties),然后在这些配置文件处于活动状态的情况下运行应用程序。有什么我没有在这里摸索的吗?

【问题讨论】:

    标签: java maven maven-3 maven-profiles


    【解决方案1】:

    我这里有一个 POM,用于带有测试套件的小型测试应用程序。我已包含您的个人资料并设置了一个属性以跳过测试。

    我可以使用 2 种不同的方法激活配置文件(并跳过测试):

    mvn clean package -Plocal
    

    mvn clean package -Denvironment=local
    

    我之前没有使用过exec 插件,我现在只是在看它,但我认为它不会改变配置文件的行为。

        <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.test</groupId>
        <artifactId>test-app</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>jar</packaging>
        <dependencies>
            <dependency>
                <groupId>org.testng</groupId>
                <artifactId>testng</artifactId>
                <version>6.8.1</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
        </properties>
    
        <profiles>
            <profile><!-- Local Dev Environment -->
                <id>local</id>
                <activation>
                    <property>
                        <name>environment</name>
                        <value>local</value>
                    </property>
                </activation>
                <properties>
                    <maven.test.skip>true</maven.test.skip>
                </properties>
            </profile><!-- End Local Dev Environment -->
        </profiles>
    </project>
    

    【讨论】:

    • 我应该在最初的问题中提到,我尝试使用-P 直接激活配置文件,但也没有成功,这让我认为我的 POM 有问题或有什么奇怪的我的 Maven 安装。
    • 我已经编辑了我的答案以包含一个适合我的示例 POM,但是我没有尝试使用 exec 插件。
    猜你喜欢
    • 2010-12-03
    • 2011-11-11
    • 2011-07-22
    • 2013-09-24
    • 2012-02-17
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 2019-04-18
    相关资源
    最近更新 更多