web-dev-qa-db-fra.com

Le programme développé avec Java 8 peut-il être exécuté sur Java 7?

Je suis un peu confus.

  1. Oracle indique que Java 8 est hautement compatible avec Java 7 (en arrière). Cependant, quelles possibilités existe-t-il que Java 8 peut être exécuté sur Java 7 avec succès (SE/EE)?

  2. Si le premier point était vrai, Java 8) seront déployées et exécutées sur un support serveur Java 7?, Par exemple, Tomcat 8 ou WildFly?).

49
Mitsu Garcia

En général non.

La compatibilité ascendante signifie que vous pouvez exécuter le programme Java 7 sur Java 8, et non l'inverse).

Il y a plusieurs raisons à cela:

  • Le bytecode est versionné et la machine virtuelle vérifie si elle prend en charge la version trouvée dans les fichiers .class.

  • Certaines constructions de langage ne peuvent pas être exprimées dans les versions précédentes de bytecode.

  • Il existe de nouvelles classes et méthodes dans les nouvelles JRE qui ne fonctionneront pas avec les anciennes.

Si vous voulez vraiment (conseil: vous ne le voulez pas), vous pouvez forcer le compilateur à traiter le code source comme une version de Java et à émettre du bytecode pour un autre, en utilisant quelque chose comme ceci:

javac -source 1.8 -target 1.7 MyClass.Java

( identique pour Maven ), et compilez contre JDK7, mais dans la pratique, cela ne fonctionnera généralement pas. Je vous recommande de ne pas le faire

[~ # ~] éditer [~ # ~] : JDK 8 ne prend apparemment pas en charge cette combinaison exacte, donc cela ne fonctionnera pas. Certaines autres combinaisons de versions fonctionnent.

Il existe également des programmes pour convertir les nouveaux Java fonctionnant sur des machines JVM plus anciennes. Pour la conversion Java 8 à 5-7, vous pouvez essayer https : //github.com/orfjackal/retrolambda Pour être inférieur à 5, vous pouvez en choisir un: http://en.wikipedia.org/wiki/Java_backporting_tools

Aucune de ces hacks ne vous donnera de nouvelles classes et méthodes Java 8, y compris le support de la programmation fonctionnelle pour les collections, les flux, les API temporelles, les API non signées, etc.). il.

Ou, puisque vous voulez exécuter vos applications Java 8 JEE sur un serveur d'applications, exécutez tout votre serveur sur Java 8, cela peut fonctionner.

74
Karol S

Compatibilité descendante

Vous pouvez exécuter la configuration inférieure sur la configuration supérieure non Vice-Versa.

13
Deepak Tiwari

Eh bien, il existe l’option - target du compilateur, qui vous permet de cibler le format de fichier de classe des versions précédentes Java. Toutefois, cela ne résout pas et ne détecte pas de telles choses. en utilisant des classes ou des méthodes introduites dans les API JDK après la version cible.

6
Nate

Pas de compatibilité ascendante signifie que les programmes Java7 seront exécutés sous Java8, mais l'inverse est pas toujours true

Vous pouvez également vérifier Compatibilité descendante limite Oracle

3
Rahul Tripathi

En règle générale, les nouvelles versions doivent offrir une compatibilité ascendante afin que les utilisateurs n'aient pas à jeter leur travail et puissent effectuer une mise à niveau facilement. L’inverse (version plus récente fonctionnant dans une version plus ancienne) n’est pas nécessairement vrai, car si vous utilisez une nouvelle fonctionnalité implémentée, cette fonctionnalité n’existe évidemment pas dans la version précédente et ne fonctionnera pas.

Cordialement

2
ctutte