Salut,
Il y a deux points à prendre en compte :- La compatibilité du bytecode.
- Les classes/méthodes de l'API.
En ce qui concerne la compatibilité du bytecode, il faut utilisé l'option -target de javac. A titre d'info le JDK 1.4 utilise comme valeur par défaut 1.2, c'est à dire que le bytecode peut être exécuté sur une JVM 1.2 au minimum.
Le JDK 1.5 utilise la valeur par défaut 1.5, et nécessite donc impérativement une JVM 1.5 ou supérieur...
Le second point est plus complexe. En effet, si tu utilises par exemple l'option -target 1.2 avec un JDK supérieur, le compilateur générera bien du bytecode compatible avec une JVM 1.2. Toutefois, ton code pourrait très bien utiliser des classes ou des méthodes inexistantes dans l'API de cette JVM... ce qui pourrait provoquer des erreurs (NoClassDefFoundError, NoSuchMethodeError, etc.).
Il est donc impératif lorsque tu utilises l'option -target d'utiliser l'API correspondante, en utilisant directement les classes de la bonne version de la JVM.
Pour cela il faut utiliser deux autres options de javac :- -bootclasspath qui correspond au classpath des classes de l'API, et d'y indiquer le fichier rt.jar de la JVM cible (ou classes.zip pour les anciennes JVM).
- -extdirs pour redéfinir le répertoire d'extension (répertoire lib/ext de la JVM par défaut). Tu peux laisser ceci vide dans la plupart des cas.
Dans ton cas cela pourrait donner ceci :
javac -target 1.3 -bootclasspath ...jre1.3/lib/classes.zip -extdirs "" *.java
(mais je ne sais plus si la JVM 1.3 utilisait un rt.jar ou un classes.zip)
a++
Partager