Récemment, nous avons mis à niveau la version de Jdk de 1.6
à 1.8
dans l’un de mes projets Java. Mais il y a des erreurs de compilation ou d’exécution, je dois donc mettre à jour certaines bibliothèques:
1.9
à 1.10
3.x
à 4.x
C’est parce qu’ils utilisent certaines versions antérieures d’ASM, mais qui ne supportent jdk 1.8 qu’à partir de la version 5.x
Java a dit qu’il est rétro-compatible, mais pourquoi les versions originales des bibliothèques ne peuvent pas fonctionner directement avec jdk 1.8?
Parce que ASM est un outil qui opère sur le code octet Java. Et le format de code octet a changé pour introduire de nouvelles fonctionnalités. En tant que tel, vous deviez mettre à niveau l’outil pour prendre en charge le nouveau code d’octet.
Notez que ce logiciel compilé avec une version plus ancienne du JDK ne fonctionne pas toujours avec les versions les plus récentes de Java. Par exemple, enum
n’était pas un mot clé dans les premières versions de JDK.
ASM est une bibliothèque de bas niveau.
Il traite directement le code en octets Java (alors qu’une application “normale” laisserait simplement la JVM charger ses classes). Le format du code d’octet change de temps en temps et les versions plus récentes ne peuvent pas être utilisées par une machine virtuelle plus ancienne.
Messing avec JDK ou internes au format de classe n’est pas couvert par la compatibilité ascendante.
Il s’agit vraiment d’un cas marginal, et ASM est à peu près le seul exemple “populaire”.
Plus important encore (et plus courant), il existe toutefois de légers changements de comportement dans le code de la bibliothèque système. Donc, techniquement, votre application fonctionnera toujours, mais fera les choses différemment. La plupart du temps, c’est ce que vous voulez, car cela signifie une amélioration (par exemple, de meilleures performances), mais cela peut parfois causer des bogues pour vous.
Par exemple:
Mais dans l’ensemble, l’histoire de la compatibilité des applications existantes est vraiment satisfaisante avec Java. Ils doivent en tenir compte pour tous leurs clients.