comment assurer la compatibilité entre deux parties travaillant sur différentes versions de jdk
-
15-09-2020 - |
Question
Mon projet est construit en 1.4.2 JDK.Il va maintenant interagir avec un fichier jar tiers, intégré au JDK 1.6.
Je rencontre un problème de compatibilité lors de l'utilisation des classes client.Est-il possible de le résoudre sans mettre à niveau mon JDK vers la version 1.6 ou reconstruire un fichier jar tiers dans la version 1.4.2
La solution
Vous ne pouvez pas exécuter une classe compilée avec JDK 1.6 sur le JDK 1.4 précédent car vous obtiendrez un java.lang.UnsupportedClassVersionError
exception.Cela est dû au fait que Java n'est pas rétrocompatible, il est simplement rétrocompatible (voir spécification).
Afin de le vérifier, j'ai installé JDK 1.4.2.19 et JDK 1.6.0.23 et écrit un exemple d'application :
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } }
Construit avec JDK 1.6.0.23 :
../1.6.0.23/bin/javac HelloWorld.java
Et exécutez-le avec JDK 1.4.2.19 :
../1.4.2.19/bin/java HelloWorld
Sortir:
Exception in thread "main" java.lang.Erreur de version de classe non prise en charge: HelloWorld (Version majeure ou mineure non prise en charge 50.0) at java.lang.ClassLoader.defineClass0(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:539) ...
Solution:Vous pouvez essayer de reconstruire votre application tierce avec JDK 1.4 si elle n'appelle pas les méthodes introduites dans 1.6 (et 1.5).