How to read Maven properties from JUnit test?

Dave picture Dave · Oct 26, 2011 · Viewed 12.2k times · Source

I'm using Maven 3.0.3 with JUnit 4.8.1. In my JUnit test, how do I read the project.artifactId defined in my Maven pom.xml file? In my pom, I have

<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>

But this isn't working within my JUnit test to gete the artifact id ...

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

The above outputs "artifactId:null". Anyway, appreciate any help, - Dave

Answer

Antti Kolehmainen picture Antti Kolehmainen · Oct 26, 2011

Maven project properties aren't automatically added to Java System properties. To achieve that there are quite a few options. For this specific need you could define a System property for maven-surefire-plugin (the one running tests) and then use the System.getProperty method.

<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>

Other way to achieve getting Maven properties to JUnit tests would probably be resources filtering for test source files.

PS. Reading Maven configurations at runtime, even in tests is pretty dirty IMHO. :)