我有一个maven项目,在pom.xml中我设置了这样的属性:
<project>
<modelVersion>4.0.0</modelVersion>
<artifactId>myArtifact</artifactId>
<name>SomeProject</name>
<packaging>jar</packaging>
<properties>
<some-system-property>1.9.9</some-system-property>
</properties>
<...>
</project>
我想从java代码中提取some-system-property值,类似于
String someSystemPropery = System.getProperty("some-system-property");
但是,这总是返回null。看看StackOverflow,大多数答案似乎围绕着修改代码的增强型maven插件 - 这在我的环境中是不可能的。
有没有办法从代码库中的pom.xml获取属性值?或者,可以获取pom.xml(下面的1.9.9值)中描述的依赖项版本:
<dependencies>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.9</version>
</dependency>
</dependencies>
来自代码?任何一个都可以解决我的需求
答案 0 :(得分:2)
这些是在构建期间应用的 Maven 属性,而不是运行时系统属性。一种典型的方法是使用Maven资源过滤将值写入目标目录中的属性文件。
答案 1 :(得分:1)
Maven属性,而不是系统属性。
通常,您应该为触发执行的maven插件设置系统属性:
surefire
进行单元测试,exec
执行,jetty
或类似用于启动网络容器还有属性maven插件可以设置属性: http://mojo.codehaus.org/properties-maven-plugin/set-system-properties-mojo.html
答案 2 :(得分:0)
使用符号$ {X}可以在POM内的任何位置访问属性值,其中X是属性,而不是外部。可通过java.lang.System.getProperties()访问的所有属性都可用作POM属性,例如$ {java.home},但不是相反。因此,对于您的Java代码,它需要将pom.xml扫描为xml解析用例,但不确定为什么要这样做。