maven项目中的系统属性始终为null

时间:2018-06-14 15:31:47

标签: java maven maven-3 maven-plugin

我的实用程序类

Properties prop = new Properties();
        ClassLoader loader = Thread.currentThread().getContextClassLoader();
        String profile = System.getProperty("env");
        //InputStream in = loader.getResourceAsStream(fileName + ".properties");
        InputStream in = loader.getResourceAsStream(fileName + "_" + profile + ".properties");

始终返回null。

我确实在pom中添加了properties-maven-plugin

<plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>properties-maven-plugin</artifactId>
            <version>1.0.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>set-system-properties</goal>
                    </goals>
                    <configuration>
                        <properties>
                            <property>
                                <name>env</name>
                                <value>prod</value>
                            </property>
                        </properties>
                    </configuration>
                </execution>
            </executions>
        </plugin>

但在获取util类中的属性值时仍然没有运气。

3 个答案:

答案 0 :(得分:1)

据我了解set-system-properties目标的文档,它在当前机器上设置环境变量。根据它的工作方式,可以仅在构建期间定义这些环境变量,仅限当前用户,或者如果您还拥有当前计算机的管理员权限,则可以定义这些环境变量。

在任何情况下,它只会在构建项目的机器上设置变量。

如果我正确理解您的问题,您希望存储构建是release(生产)还是debug构建?

在这种情况下,您可以使用maven-assembly-plugin并定义清单值。此清单值将写入jar的清单,您可以在运行时读取该清单,例如: G。使用JCabi Manifest库。

答案 1 :(得分:0)

你尝试过这个吗?

<systemProperties>
    <systemProperty>
        <name>env</name>
        <value>prod</value>
    </systemProperty>
</systemProperties>

答案 2 :(得分:0)

作为旁注 - 如果你在看到错误时使用surefire来运行它,你可能应该使用它的内置系统属性功能:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <systemPropertyVariables>
            <env>prod</env>
        </systemPropertyVariables>
    </configuration>
</plugin>