commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gilles Sadowski <gil...@harfang.homelinux.org>
Subject Re: [Math] How to select a specific JDK ?
Date Wed, 13 Jun 2012 16:07:37 GMT
On Wed, Jun 13, 2012 at 05:32:14PM +0200, Xavier Detant wrote:
> Ok, my bad, I didn't explain myself clearly…
> I meant, the byte code generated by the compiler is totally independent
> from the _kind_ of JVM
>   that will be used to run it.
> 
> So a code compiled for 1.6 will run on a sun JDK as on a openJDK.

Yes, but will they produce the same result? That's what I must investigate.
I want to be able to select a given set of tools (javac, java, etc.), do the
build, run the tests; then select another set of tools (different version,
different "vendor"), do the build, run the tests, and compare the two
outputs.


Best,
Gilles

> 
> Nevertheless, the code must be compiled for the right version or lesser. So
> if you have a 1.6 JVM, you need the code to be compiled for a 1.6 or 1.5 or
> 1.4… The JVMs are retro-compatibles (a 1.6 JVM can run a 1.5 byte code).
> 
> Further more, java compiler are also retro-compatibles. It means that a
> compiler that can compile a 1.7 code can compile it as a 1.6 code. This is
> the difference between :
> <source>1.6</source>
> and
> <target>1.6</target>
> in the maven's pom.xml.
> 
> So if you use
> <source>1.7</source>
> <target>1.5</target>
> 
> You'll need a 1.7 JDK to compile it but only a 1.5 or higher JVM to run it.
> Obviously, the source version must be equals or higher than the target
> version, and if your code use 1.7 features, the source version must be (at
> least) 1.7 or the compiler will raise an error.
> 
> Finally, as said James, if you want to industrialize your tests, you should
> use a dedicated tool as Jenkins (I don't know if continuum can do that). If
> you want, you can use profiles in Maven to switch easily the versions to
> use (
> http://maven.apache.org/guides/introduction/introduction-to-profiles.html).
> 
> 
> 2012/6/13 Gilles Sadowski <gilles@harfang.homelinux.org>
> 
> > 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
> >
> > > 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.
> >
> >
> > Best regards,
> > Gilles
> >
> > >
> > > 2012/6/13 Gilles Sadowski <gilles@harfang.homelinux.org>
> > >
> > > > Hello.
> > > >
> > > > >
> > > > > With maven, you can configure the compiler to compile in the version
> > you
> > > > > want.
> > > > >
> > > > > Add this to the pom.xml and set the arguments as you which.
> > > > >
> > > > > <build>
> > > > >         <pluginManagement>
> > > > >                 <plugin>
> > > > >                     <groupId>org.apache.maven.plugins</groupId>
> > > > >                     <artifactId>maven-compiler-plugin</artifactId>
> > > > >                     <version>2.4</version>
> > > > >                     <configuration>
> > > > >                         <encoding>UTF-8</encoding>
> > > > >                         <source>1.6</source>
> > > > >                         <target>1.6</target>
> > > > >                         <compilerArguments>
> > > > >                             <Xlint:-unchecked />
> > > > >                         </compilerArguments>
> > > > >                     </configuration>
> > > > >                 </plugin>
> > > > >
> > > > > See http://maven.apache.org/plugins/maven-compiler-plugin/ for more
> > > > > informations.
> > > >
> > > > I had seen that, but that cannot be the whole story (unless there is
> > some
> > > > maven magic involved); indeed, how can maven differentiate
> > > >  java-6-openjdk-amd64
> > > > from
> > > >  java-6-sun
> > > > (since both are Java 1.6)?
> > > >
> > > > I was thinking that there should be some environment variable(s) whose
> > > > setting would somehow activate the above configuration.
> > > >
> > > >
> > > > Regards,
> > > > Gilles
> > > >
> > > > >
> > > > >
> > > > > 2012/6/13 Gilles Sadowski <gilles@harfang.homelinux.org>
> > > > >
> > > > > > On Wed, Jun 13, 2012 at 12:48:31PM +0200, Jochen Wiedmann wrote:
> > > > > > > Yes, that switch is called PATH (environment variable).
> > > > > >
> > > > > > Do you mean that I should change the PATH variable just to build
> > > > Commons
> > > > > > Math?
> > > > > > I surely hope that there is a more flexible way.
> > > > > >
> > > > > > With "ant", all that's needed is to define JAVA_HOME (another
> > > > environment
> > > > > > variable, but specific to the task at hand).
> > > > > >
> > > > > > > On Wed, Jun 13, 2012 at 12:19 PM, Gilles Sadowski
> > > > > > > <gilles@harfang.homelinux.org> wrote:
> > > > > > > > Hello.
> > > > > > > >
> > > > > > > > Are there command-line switches that will select a
specific
> > JDK?
> > > > > > > > I.e. I have several of them installed:
> > > > > > > >
> > > > > > > > $ ls -l /usr/lib/jvm
> > > > > > > > total 36
> > > > > > > > lrwxrwxrwx  1 root root   24 Dec 17 11:04 default-java
->
> > > > > > java-1.6.0-openjdk-amd64
> > > > > > > > lrwxrwxrwx  1 root root   18 Jan  5 18:27 java-1.5.0-gcj
->
> > > > > > java-1.5.0-gcj-4.6
> > > > > > > > drwxr-xr-x  6 root root 4096 Jan 18 15:04 java-1.5.0-gcj-4.4
> > > > > > > > drwxr-xr-x  6 root root 4096 Mar  7 17:33 java-1.5.0-gcj-4.6
> > > > > > > > lrwxrwxrwx  1 root root   23 Aug 11  2010 java-1.5.0-sun
->
> > > > > > java-1.5.0-sun-1.5.0.22
> > > > > > > > drwxr-xr-x 10 root root 4096 Aug 11  2010
> > java-1.5.0-sun-1.5.0.22
> > > > > > > > lrwxrwxrwx  1 root root   20 Dec 16 18:51
> > java-1.6.0-openjdk-amd64
> > > > ->
> > > > > > java-6-openjdk-amd64
> > > > > > > > lrwxrwxrwx  1 root root   20 May  3 14:00
> > java-1.7.0-openjdk-amd64
> > > > ->
> > > > > > java-7-openjdk-amd64
> > > > > > > > drwxr-xr-x  3 root root 4096 Jan 18 15:38 java-6-openjdk
> > > > > > > > drwxr-xr-x  7 root root 4096 Mar  7 17:29 java-6-openjdk-amd64
> > > > > > > > drwxr-xr-x  3 root root 4096 Jan 18 15:38 java-6-openjdk-common
> > > > > > > > lrwxrwxrwx  1 root root   19 Jun  9  2011 java-6-sun
->
> > > > > > java-6-sun-1.6.0.26
> > > > > > > > drwxr-xr-x  8 root root 4096 Jan 18 15:47 java-6-sun-1.6.0.26
> > > > > > > > drwxr-xr-x  7 root root 4096 Jun  5 17:12 java-7-openjdk-amd64
> > > > > > > > drwxr-xr-x  3 root root 4096 Jun  5 17:12 java-7-openjdk-common
> > > > > > > > lrwxrwxrwx  1 root root   12 Jan  5 18:27 java-gcj
->
> > java-gcj-4.6
> > > > > > > > lrwxrwxrwx  1 root root   18 Apr 29  2010 java-gcj-4.4
->
> > > > > > java-1.5.0-gcj-4.4
> > > > > > > > lrwxrwxrwx  1 root root   18 Nov 14  2011 java-gcj-4.6
->
> > > > > > java-1.5.0-gcj-4.6
> > > > > > > >
> > > > > > > > and I'd like to be able to say something like
> > > > > > > >  -D...=/usr/lib/jvm/java-7-openjdk-amd64
> > > > > > > > so that maven will use the corresponding compiler
and JVM.
> > > > > > > >
> > > > > > > > Does the default configuration already cares for this?
If so,
> > which
> > > > > > are the
> > > > > > > > command-lins options?
> > > > > > > >
> > > > > > > > If not, I guess that this should be defined in a "profile"
in
> > > > > > > > "settings.xml". If so, could someone post such a profile?
> > > > > > > >
> > > > > > > >
> > > > > > > > Thanks,
> > > > > > > > Gilles
> > > > > > > >
> > > > > >
> > > > > >
> > ---------------------------------------------------------------------
> > > > > > To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> > > > > > For additional commands, e-mail: dev-help@commons.apache.org
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Xavier DETANT
> > > >
> > > > ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> > > > For additional commands, e-mail: dev-help@commons.apache.org
> > > >
> > > >
> > >
> > >
> > > --
> > > Xavier DETANT
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> > For additional commands, e-mail: dev-help@commons.apache.org
> >
> >
> 
> 
> -- 
> Xavier DETANT

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


Mime
View raw message