这是我的pom. xml文件:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>test</artifactId>
<version>1.0-SNAPSHOT</version>
<profiles>
<profile>
<id>my_proj</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.4.0</version>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>java</executable>
<arguments>
<argument>-classpath</argument>
<classpath />
<argument>com.test.Main</argument>
</arguments>
<systemProperties>
<systemProperty>
<key>someKey</key>
<value>someValue</value>
</systemProperty>
</systemProperties>
<environmentVariables>
<someKey>
someValue
</someKey>
</environmentVariables>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
在Main.java
public static void main(String[] args) {
System.out.println("hello world" + System.getenv("someKey") + " " + System.getProperty("someKey"));
}
我运行时的输出
mvn install -Pmy_proj
是
hello worldsomeValue null
我似乎无法获得systemProperty值。我做错了什么?
systemProperty
不能简单地工作,因为它不是exec-maven-plugin
的exec
目标的预期元素。
检查官方的exec
目标页面,没有指定systemProperties
元素。因此,您的配置对Maven仍然有效,只是因为它是格式良好的XML,但它被exec-maven-plugin
忽略。
来自官方Maven Pom参考关于插件配置
元素:
值得注意的是,所有配置元素,无论它们在POM中的哪个位置,都旨在将值传递给另一个底层系统,例如插件。换句话说:配置元素中的值永远不会被POM模式显式要求,但是插件目标完全有权要求配置值。
您正在混淆其java
目标所预见的systemProperties
配置条目。此选项在那里可用是因为它的上下文:它是为java执行而设计的。另一方面,exec
目标更加通用,因此不能预见只有java程序需要的选项。
要通过exec
目标将系统属性传递给Java执行,您可以使用参数
配置条目并使用-D
表示法
-Dproperties=value
设置系统属性值。
进一步注意,根据官方的运行Java程序和exec目标留档,-D
参数应该首先出现:
<configuration>
<executable>java</executable>
<arguments>
<argument>-DsomeKey2=someValue2</argument>
<argument>-classpath</argument>
<classpath />
<argument>com.test.Main</argument>
</arguments>
<environmentVariables>
<someKey>someValue</someKey>
</environmentVariables>
</configuration>
此外,您不应该为环境和系统属性设置相同的变量名,否则不会设置系统属性。