reconoce proyecto programa por lotes interno externo ejemplos ejecutar ejecutable desde consola compilar como comando archivo aplicacion java backwards-compatibility java-8 java-server

proyecto - java consola



¿Un programa hecho con Java 8 se puede ejecutar en Java 7? (6)

Estoy un poco confundido.

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

  2. Si el punto uno fuera verdadero, ¿las aplicaciones Java 8 se implementarán y ejecutarán en un servidor Java 7? por ejemplo, Tomcat 8 o WildFly?


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


En general, las nuevas versiones tienen que ofrecer compatibilidad con versiones anteriores, por lo que las personas no tienen que lanzar su trabajo y pueden actualizarse fácilmente. La otra manera (la versión más reciente que se ejecuta en la versión anterior) no es necesariamente cierta porque, si utiliza alguna función implementada nueva, esta característica obviamente no existe en la versión anterior y no funcionará.

Saludos


En general, no.

La compatibilidad con versiones anteriores significa que puede ejecutar el programa Java 7 en el tiempo de ejecución de Java 8, y no al revés.

Hay varias razones para eso:

  • Bytecode está versionado y JVM verifica si es compatible con la versión que encuentra en los archivos .class.

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

  • Hay nuevas clases y métodos en los nuevos JRE que no funcionan con los más antiguos.

Si realmente quieres (consejo: no), puedes forzar al compilador a tratar la fuente como una versión de Java y emitir un código de bytes 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 no funcionará más a menudo que funcionará. Te recomiendo que no lo hagas

EDIT : JDK 8 aparentemente no es compatible con esta combinación exacta, por lo que no funcionará. Algunas otras combinaciones de versiones funcionan.

También hay programas para convertir nuevos programas de Java para que funcionen en JVM anteriores. Para convertir Java 8 a 5-7, puedes probar https://github.com/orfjackal/retrolambda Para obtener menos de 5, puedes elegir uno de estos: http://en.wikipedia.org/wiki/Java_backporting_tools

Ninguno de estos hacks le brindará nuevas clases y métodos de Java 8, incluida la compatibilidad de programación funcional para colecciones, secuencias, API de tiempo, API sin firma, etc. Así que diría que no vale la pena.

O bien, como quiere ejecutar sus aplicaciones Java 8 JEE en un servidor de aplicaciones, simplemente ejecute todo su servidor en Java 8, puede funcionar.


Generé stubs desde WSDL, compilado en java 8 y pude desplegarlos en un servidor que tiene java 1.6 jvm.



La compatibilidad hacia atrás significa

Puede ejecutar una configuración más baja en una configuración más alta, no Vice-Versa .