2010-11-17 31 views
4

L'article "Don’t be fooled by javac -target 1.4" montre que la compilation avec -target 1.4 peut encore créer des fichiers de classe qui ne fonctionneront pas sur JRE 1.4.Est-ce que javac -target 1.3 garantit que les classes seront exécutées sous JRE 1.3?

Il décrit également comment le paramètre -bootclasspath peut résoudre ce problème. Maintenant, ma question: si je compile avec la version Sun JDK 1.6 de javac, en utilisant les paramètres source et cible mis à 1.3, est-il prudent de supposer que les classes compilées fonctionneront sur un JRE 1.3?

Répondre

4

Elles ne fonctionneront pas si vous utilisez des méthodes ou des classes de la bibliothèque standard qui n'existaient pas dans 1.3, car ces fichiers ne sont pas compilés dans votre programme, mais font partie des bibliothèques de la JVM.

+0

Je voudrais clarifier la première partie. La question contient deux questions diamétralement opposées: une dans le titre et une dans le texte. Il n'est pas tout à fait clair lequel vous répondez ;-) –

+0

Bon point, j'ai édité le texte. – mjn

+0

J'ai supprimé le "Oui" de ma réponse, car il est hors contexte avec ledit changement de texte. Le reste de la réponse est resté le même. – Powerlord

0

En fait, comme le dit l'article, votre code sera compatible bytecode avec la version 1.3, mais pas avec 1.3. En conséquence, il vous est possible d'utiliser des classes ou méthodes post-1.3 (comme l'indique leur exemple) tant que vous utilisez un rt.jar provenant d'une version plus récente que la version 1.3 attendue. En conséquence, le seul moyen sûr de développer pour 1.3 est d'utiliser un 1.3 JDK ... ou de s'appuyer sur des outils de vérification, comme ... oh merde! Je suis sûr qu'il y a un plugin de rapport maven qui peut vérifier que votre code est compatible avec le JDK attendu, mais ne peut pas trouver comment il s'appelle. Cependant, notez qu'il existe des outils comme Retrotranslator, qui prendront votre code post 1.5 pour l'adapter aux versions précédentes ... tant que votre code repose uniquement sur JDK, car ils ne peuvent pas gérer toutes les API externes dépendances