Using Java 7 to target much older JVMs
Overview
Java 5.0 and 6 used to have poor support for compiling classes to target older versions of Java. It always supported the previous version, but often no more. Even if you could compile for previous version, you had to be careful not to use functionality which did exist in the previous versions.Java 7
Java 7 addresses both these issues. Firstly, it supports sources back to 1.2 and targets back to Java 1.1. Secondly. it insists you set the bootclasspath so you can include the version of the libraries you will be using for that version.public class Main { public static void main(String[] args) { System.out.println("Hello World!"); } } $ javac -target 1.7 -source 1.7 Main.java $ javac -target 1.6 -source 1.6 Main.java warning: [options] bootstrap class path not set in conjunction with -source 1.6 1 warning $ javac -Xbootclasspath:/usr/java/jdk1.6.0_29/jre/lib/rt.jar -target 1.6 -source 1.6 Main.java $ javac -Xbootclasspath:/usr/java/jdk1.5.0_22/jre/lib/rt.jar -target 1.5 -source 1.5 Main.java $ javac -Xbootclasspath:/usr/java/jdk1.4.0_30/jre/lib/rt.jar -target 1.4 -source 1.4 Main.java $ javac -Xbootclasspath:/usr/java/jdk1.3.1_29/jre/lib/rt.jar -target 1.3 -source 1.3 Main.java $ javac -Xbootclasspath:/usr/java/jdk1.2.2_017/jre/lib/rt.jar -target 1.2 -source 1.2 Main.java $ javac -Xbootclasspath:/usr/java/jdk1.1.8_16/jre/lib/rt.jar -target 1.1 -source 1.2 Main.java $ javac -Xbootclasspath:/usr/java/jdk1.1.8_16/jre/lib/rt.jar -target 1.1 -source 1.1 Main.java javac: invalid source release: 1.1 Usage: javac
BTW: All the previous versions back to 1.1 are available from the Oracle web site Oracle Java Archive
Its pretty important to know -target and -source switch as there are times when you work in legacy application which is not running on Java5 and your IDE accidentally copied something available to Java5 only.
ReplyDeleteThanks
What is the problem while using "==" in autoboxing world in Java 5 ?
i really need a clear explanation on how to set a class path as you mentioned
ReplyDeleteYou use the command line specified above, what is your doubt?
Delete