In this thread, Nicolas De Loof writes:
I solved the issue of compiling the application code for Java 1.3 AND
using java5 for tests :
Application code is compiled based on java 1.3 using compiler
bootclasspath argument.
Tests are compiled by adding a compiler execution prior to test-phase
(as I didn't find a way to configure testCompile to use a != configuration).
Here is my POM :
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.3</source>
<target>1.3</target>
<compilerArguments>
<bootclasspath>${settings.localRepository}/com/sun/rt/1.3.1_08/rt-1.3.1_08.jar</bootclasspath>
</compilerArguments>
</configuration>
<executions>
<execution>
<id>compile-tests</id>
<phase>process-test-sources</phase>
<goals>
<goal>testCompile</goal>
</goals>
<configuration>
<source>1.5</source>
<target>1.5</target>
<compilerArguments>
<bootclasspath>
${java.home}/lib/rt.jar
</bootclasspath>
</compilerArguments>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.sun</groupId>
<artifactId>rt</artifactId>
<version>1.3.1_08</version>
</dependency>
</dependencies>
</plugin>
Please note this is only a maven2 hack. Tests are compiled prior to the "test-compile" phase to allow compiler configuration substitution. A better solution should be to have support for separate configuration of the compiler plugin for compile and test-compile phases.
| Handy Hint If you have to set more than one jar in your bootClasspath you need to separate them according to your platform (';' on Windows and ':' on Unix). The simplest way to support multi-plateform environment is to use ${path.separator} so you would have for example : <bootclasspath>${settings.localRepository}/com/sun/rt/1.4.2_13/rt-1.4.2_13.jar${path.separator}${java.home}/lib/jsse.jar${path.separator}${java.home}/lib/jce.jar</bootclasspath>
|
In this thread:
http://mail-archives.apache.org/mod_mbox/maven-users/200702.mbox/%3C8770432.post@talk.nabble.com%3E
James Wiltshire found a way to obtain the desired result without needing to specify the bootclasspath.
An example that has source and target at 1.4 and 1.5 for production and test source, respectively:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>java-1.4-compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<source>1.4</source>
<target>1.4</target>
</configuration>
</execution>
<execution>
<id>java-1.5-compile</id>
<phase>process-test-sources</phase>
<goals>
<goal>testCompile</goal>
</goals>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
