从java中的pom.xml获取属性

时间:2015-02-19 17:47:39

标签: java maven pom.xml

我有一个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>

来自代码?任何一个都可以解决我的需求

3 个答案:

答案 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解析用例,但不确定为什么要这样做。