91 votes

Les versions plus récentes de JRE peuvent-elles exécuter des programmes Java compilés avec des versions plus anciennes de JDK ?

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 ?

106voto

diginoise Points 124

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 :

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.

93voto

Ewald Points 2748

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X