Aurais-je des problèmes pour exécuter les programmes Java et les bibliothèques associées compilés dans la version 1.6 de Java ? et 1.7 (je compile en 1.7 alors que certaines bibliothèques sont compilées en 1.6) et exécuter le programme entier dans un JRE 1.7 ?
Réponses
Trop de publicités?Comme déjà répondu, vous êtes principalement sûr et más et 3 rd Les bibliothèques de tiers fonctionneront tout simplement. Cependant, il existe existent les très rares cas où incompatibilités binaires ( celles où le fichier de classe compilé à l'aide de l'ancien JDK ne s'exécutera pas dans la nouvelle JVM. ) ont été introduits entre les versions du JDK.
Liste officielle des incompatibilités d'Oracle Java entre les versions :
- en Java SE 9 depuis Java SE 8
- en Java SE 8 depuis Java SE 7
- en Java SE 7 depuis Java SE 6
- dans Java SE 6 depuis Java SE 5.0
- en Java SE 5.0 depuis Java SE 1.4.2
Outil de compatibilité
Emballé avec JDK 9 il existe un outil appelé jdeprscan qui vérifie la compatibilité, liste les APIs qui ne sont plus utilisées dans votre code et suggère des alternatives ( !). Vous pouvez spécifier la cible Version du JDK (fonctionne pour JDK 9 , 8 , 7 y 6 ) et il listera les incompatibilités spécifiques à votre version cible.
Commentaire supplémentaire en cas de bibliothèques :
Une règle empirique raisonnable est d'utiliser la dernière version stable de la bibliothèque pour la version JRE que votre logiciel cible. Il est évident que vous trouverez de nombreuses exceptions à cette règle, mais en général, la stabilité des bibliothèques disponibles publiquement généralement augmente avec le temps.
Naturellement Compatibilité API y versioning doivent être prises en compte lors du changement de version des dépendances.
Encore une fois, les dépendances les plus populaires auront des pages web où ces informations devraient être disponibles.
Si toutefois vous utilisez quelque chose d'un peu plus obscur, vous pouvez discerner pour quel JRE les classes de votre dépendance ont été compilées.
Voici une excellente réponse sur la façon de trouver la version de classe . Il se peut que vous deviez d'abord décompresser le fichier JAR.
Vous ne rencontrerez aucun problème - c'est la magie de Java - il est rétrocompatible. Vous pouvez exécuter presque tout le code de Java 1 sur Java 8. Il n'y a aucune raison pour que le code Java 6 ne fonctionne pas sur un Runtime Java 8.
Ce qui est intéressant, c'est que pour les applications écrites, disons, en Java 1.4, vous obtenez même des gains de vitesse en les exécutant sur des runtimes plus récents. Cela s'explique par le fait que Java évolue constamment, non seulement le langage appelé "Java", mais aussi la JVM (machine virtuelle Java). J'ai encore des codes sources datant de plus de 10 ans qui fonctionnent toujours, comme prévu, dans la dernière JVM.
Si vous voulez cibler, disons, une VM Java 5, vous pouvez le faire avec les outils du SDK Java 8. En fin de compte, vous pouvez spécifier la VM cible que vous souhaitez prendre en charge, à condition de garder à l'esprit qu'une VM version 5 peut ne pas prendre en charge toutes les fonctionnalités d'une VM version 8.
Je viens de tester le code que j'ai écrit en Java 5 avec le nouveau runtime Java 8 et tout fonctionne comme prévu. Ainsi, même si nous disposons maintenant d'un langage et d'un runtime plus puissants, nous pouvons continuer à utiliser nos investissements du passé. Rien que cela fait de Java un excellent choix de développement pour les entreprises.