From: Egon W. <e.w...@sc...> - 2005-02-15 10:52:56
|
On Tuesday 15 February 2005 10:40 am, Peter Murray-Rust wrote: > We develop on both Java 1.4 and 1.5 and discovered yesterday that byte code > *compiled on 1.5* will not run on 1.4 systems (even simple programs like > HelloWorld). It fails with an incompatible version number (actually > requires version 49.0 (sic) of Java). Therefore if we compiled and released > JUMBO on 1.5 machines it would fail anywhere with 1.4. [We assume that J1.4 > bytecode runs on 1.5 systems] > > Q. what strategy do the various groups have for this? Do you have any idea > of the rate of take up of J1.5? Jmol uses this in the build.xml: <property name="build.compiler" value="javac1.4" /> <property name="java.version" value="1.4" /> and <target name="applet-classes" id="applet-classes" depends="init"> <mkdir dir="${applet.classes.dir}"/> <property name="build.compiler" value="javac1.1" /> <!-- mth 20040713 ... with the Sun Java 1.5 compiler the default source code version is 1.5. And one cannot generate code for a 1.1 virtual machine from 1.5 source. Therefore, in order to compile for the 1.1 jvm, we need to specify that the source version is 1.3. (Note that we cannot use source=1.4 because of assertions) miguel 20041121 I do not know recall exactly what I meant by the statement in (parentheses) above. I *think* that what I was saying is that if you say 'source=1.4' then one also cannot generate code for a 1.1 jvm, because of the special support for assertions (which were introduced in 1.4). --> <javac srcdir="src" destdir="${applet.classes.dir}" debug="${debug}" deprecation="${deprecation}" optimize="${optimization}" source="1.3" target="1.1" includesfile="applet.classes" classpathref="applet-project.class.path" /> <!-- mth tried to use exclude and excludefiles, but it did not work --> <delete includeEmptyDirs="true"> <fileset dir="${applet.classes.dir}/org/openscience/jmol"> <include name="*.class" /> </fileset> </delete> Note the target="1.1" attribute, and the comment on why source="1.3" was added... I think target="1.4" should work. > javac 1.5 has a switch -target 1.4 which we assume generates byte code > compatible with J1.4 systems. > > Q does this work? Miguel normally makes sure it works. > Q. have you used and deployed code of this sort? See above. > Q is it a good strategy? Better would be to try to compile *and* test with both JVMs... > Q should our community (Jmol, JCP, CDK, QSAR, Octet, JOElib, JUMBO) have a > communal view? If we all do the same thing we are limited by the slowest. I > assume that Jmol, for example, need to retain considerable backward > compatibility Indeed. Egon |