如何从JUnit测试中读取Maven属性?

时间:2011-10-26 13:53:06

标签: maven junit system-properties

我正在使用Maven 3.0.3和JUnit 4.8.1。在我的JUnit测试中,如何读取我的Maven pom.xml文件中定义的project.artifactId?在我的pom中,我有

<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.myco.pplus2</groupId>
<artifactId>pplus2</artifactId>

但是这在我的JUnit测试中没有用来设置工件id ...

@Before
public void setUp() { 
    ...        
    System.out.println( "artifactId:" + System.getProperty("project.build.sourceEncoding") ); 
}   // setUp

以上输出“artifactId:null”。无论如何,感谢任何帮助, - 戴夫

3 个答案:

答案 0 :(得分:10)

Maven项目属性不会自动添加到Java System属性中。要实现这一目标,有很多选择。对于这个特定需求,您可以为maven-surefire-plugin(运行测试的那个)定义一个System属性,然后使用System.getProperty方法。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.10</version>
    <configuration>
        <systemProperties>
            <property>
                <name>projectArtifactId</name>
                <value>${project.artifactId}</value>
            </property>
        </systemProperties>
    </configuration>
</plugin>

实现将Maven属性转换为JUnit测试的其他方法可能是对测试源文件进行资源过滤。

PS。在运行时读取Maven配置,即使在测试中也非常脏恕我直言。 :)

答案 1 :(得分:7)

看看systemPropertyVariables(和朋友们)肯定会。它做你想要的。 AFAIK没有办法只传递所有maven属性而不列出它们。

答案 2 :(得分:0)

有时,Eclipse配置为使用Java Builder进行项目 - >自动构建(右键单击&gt;项目 - >属性 - >构建器)

如果是这种情况,有时资源过滤不起作用。您有几种选择:

  1. 如上所述在pom.xml文件中提供该属性。
  2. 提供属性文件并执行Maven资源过滤
  3. 使用Maven Invoker
  4. http://scottizu.wordpress.com/2013/10/16/reading-the-project-version-from-the-maven-pom-file/

    中描述了

    2和3