Maven: compiling and testing on different source levels

java, maven, mockito, unit-testing

Solution

The source and target versions can be set separately for the compile and testCompile goals of the maven compiler plugin. You can change the settings either by defining properties in your pom:

<properties>
    <maven.compiler.source>1.4</maven.compiler.source>
    <maven.compiler.target>1.4</maven.compiler.target>
    <maven.compiler.testSource>1.5</maven.compiler.testSource>
    <maven.compiler.testTarget>1.5</maven.compiler.testTarget>
</properties>

Or by explicit configuration of the compiler plugin:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <source>1.4</source>
        <target>1.4</target>
        <testSource>1.5</testSource>
        <testTarget>1.5</testTarget>
    </configuration>
</plugin>

Problem

I am currently working on a project which will run on an embedded device. The device runs a Java ME JRE (comparable to Java 1.4). Because of this maven is configured to compile for source & target level 1.4. Is it possible to run the maven test phase on a different source/target level? Because this way I could use Mockito for unit-testing.

Original source