Un programa hecho con Java 8 se puede ejecutar en Java 7?


Estoy un poco confundido.

  1. Oracle dice que Java 8 es altamente compatible con Java 7 (hacia atrás). Pero, ¿qué posibilidades existen que el programa Java 8 se puede ejecutar en Java 7 con éxito (SE/EE)?

  2. Si el punto uno era cierto, las aplicaciones Java 8 se desplegarán y ejecutarán en un soporte de servidor Java 7? por ejemplo, Tomcat 8 o WildFly?

Author: Karthikeyan Vaithilingam, 2014-03-24

6 answers

En general, no.

La compatibilidad hacia atrás significa que puede ejecutar el programa Java 7 en tiempo de ejecución Java 8, no al revés.

Hay varias razones para eso:

  • Bytecode está versionado y JVM comprueba si es compatible con la versión en la que encuentra .archivos de clase.

  • Algunas construcciones de lenguaje no se pueden expresar en versiones anteriores de bytecode.

  • Hay nuevas clases y métodos en JRE más nuevos que no funcionarán con los mayores.

Si realmente quieres (consejo: no quieres), puedes forzar al compilador a tratar el código fuente como una versión de Java y emitir bytecode para otra, usando algo como esto:

javac -source 1.8 -target 1.7 MyClass.java

(lo mismo para Maven), y compilar contra JDK7, pero en la práctica más a menudo no funciona que funciona. Te recomiendo que no lo hagas.

EDIT : JDK 8 aparentemente no soporta esta combinación exacta, así que esto no funcionará. Algunos otros las combinaciones de las versiones funcionan.

También hay programas para convertir programas Java más nuevos para trabajar en JVM más antiguas. Para convertir Java 8 a 5-7, puede probar https://github.com/orfjackal/retrolambda Para obtener menos de 5, puede elegir uno de estos: http://en.wikipedia.org/wiki/Java_backporting_tools

Ninguno de estos hacks le dará nuevas clases y métodos Java 8, incluyendo soporte de programación funcional para colecciones, flujos, API de tiempo, API sin firmar, y así sucesivamente. Así que diría que no vale la pena.

O, ya que desea ejecutar sus aplicaciones Java 8 JEE en un servidor de aplicaciones, simplemente ejecute todo su servidor en Java 8, puede funcionar.

 70
Author: Karol S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-28 21:37:55

Compatibilidad con versiones anteriores significa

Puede Ejecutar una configuración inferior en una Configuración Superior no Vice-Versa.

 12
Author: Deepak Tiwari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-13 07:50:34

Bueno, existe la opción de compilador -target, que le permite apuntar al formato de archivo de clase de versiones anteriores de java. Sin embargo, esto no corrige ni detecta cosas como el uso de clases o métodos introducidos en las API JDK después de la versión de destino.

 5
Author: Nate,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-24 13:23:18

No hay compatibilidad con versiones anteriores significa que los programas Java7 se ejecutarán bajo Java8, pero lo contrario es no siempre verdadero

También puede comprobar Oracle Limit Backward Compatibility

 3
Author: Rahul Tripathi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-28 17:45:36

En general, las nuevas versiones tienen que dar compatibilidad hacia atrás, por lo que la gente no tiene que tirar su trabajo y puede actualizar fácilmente. Al revés (versión más reciente que se ejecuta en la versión anterior) no es necesariamente cierto porque si se utiliza alguna nueva característica implementada, esa característica obviamente no existe en la versión anterior y no funcionará.

Saludos

 2
Author: ctutte,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-24 13:18:48

Generé stubs desde WSDL, compilados en java 8 y pude implementarlos en un servidor con java 1.6 jvm en él.

 -1
Author: Sandeep Shankar Harikrishnan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-29 00:13:31