Gilles Sadowski wrote:

> On Wed, Jun 13, 2012 at 03:05:13PM +0200, Xavier Detant wrote:
>> The byte code generated by the compiler is totally independent from the
>> JVM that will be used to run it.
> 
> Totally independent? Compiling with 1.7 and running with 1.6 will raise
> this error:
>   Unsupported major.minor version 51.0

Then you have setup your POM wrongly. Target should always be the lowest 
supported JDK.

Nevertheless we have profiles in one of our parent POMs to select different 
JDK versions to compile and run the tests. My settings.xml contains:

============= %< =============
            <profile>
                <id>java-1.3</id>
                <properties>
                    <JAVA_1_3_HOME>/opt/sun-jdk-1.3.1.21</JAVA_1_3_HOME>
                </properties>
            </profile>
            <profile>
                <id>java-1.4</id>
                <properties>
                    <!--JAVA_1_4_HOME>/opt/blackdown-
jdk-1.4.2.03</JAVA_1_4_HOME-->
                    <JAVA_1_4_HOME>/opt/ibm-jdk-
bin-1.4.2.13_p9</JAVA_1_4_HOME>
                </properties>
            </profile>
            <profile>
                <id>java-1.5</id>
                <properties>
                    <JAVA_1_5_HOME>/opt/ibm-jdk-
bin-1.5.0.12_p5</JAVA_1_5_HOME>
                    <!--JAVA_1_5_HOME>/opt/sun-jdk-1.5.0.22</JAVA_1_5_HOME--
>
                </properties>
            </profile>
            <profile>
                <id>java-1.6</id>
                <properties>
                    <JAVA_1_6_HOME>/opt/sun-jdk-1.6.0.24</JAVA_1_6_HOME>
                </properties>
            </profile>
============= %< =============

i.e. even if I run Maven with Java 7, I can use the profile to select 
something different.

>> So I think the point is not «How to compile
>> using the right JDK?» but «How to run with using the right JVM?» Am I
>> wrong?
> 
> It is both: compiling _and_ running the tests.
>
> I should be able to do all combinations, i.e.:
>  1. Compile with javac 1.6 and run with java 1.6
>  2. Compile with javac 1.7 and run with java 1.7
>  3. Compile with javac 1.6 and run with java 1.7
> (and similarly with s/6/5/)
> 
>> If so, this can't be done at compile time, so it can't be done via
>> maven, unless you use antrun maven's plugin to create a ant task to
>> launch your program.
> 
> The point is to compile and then _run_ the unit tests, assuming that the
> code conforms to the syntax of Java 5, Java 6, and Java 7, respectively.
> 
> In particular, if some source code is Java 5, it should be compatible with
> more recent versions of the Java language, thus be compilable with more
> recent implementations of javac.
> The ultimate goal is to check that the unit tests pass independently of
> the javac and java versions.

You can use Java 7 to compile and use a different JDK to run the tests:

$ java -version
java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)
$ mvn clean package
$ mvn -P java-1.5 test

The animal sniffer plugin can ensure on top of it, that no Java 7 stuff is 
used, even if it is used to compile for Java 5.

Cheers,
Jörg


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to