Pregunta

Se código compilado usando 1.5 y 1.6 se ejecutan en un 1,4 JRE? No estábamos seguros de qué versiones de Java es compatible con el 1.4 JRE.

Sabemos que si el código en cuestión implementa 1.5 o 1.6 características soportadas entonces definitivamente no se compilará ... y que hay algunos riesgos con "hacia atrás la compilación" pero no estaba seguro si el JRE 1.4 rechazaría incluso cargar las clases compiladas 1.5 / 1.6 o no.


Actualizar . Confirmé se obtiene una excepción java.lang.UnsupportedClassVersionError si ejecuta un archivo de 1,6 clase de JRE 1.4

¿Fue útil?

Solución

Si usted acaba de construir con los valores por defecto de javac 1.6, los archivos de clases no funcionarán en las versiones antiguas de Java.

La mejor manera de compilar para Java de más edad es sólo para usar la mayores JDK libera . Pero si usted realmente quiere intentar compilar para Java más viejo de nuevo, aquí hay algunas instrucciones:

Otros consejos

Se puede cruzar a compilar. Este documento muestra cómo:

http: // java. sun.com/javase/6/docs/technotes/tools/solaris/javac.html#crosscomp-example

Debe especificar la versión principal que esté orientando (1.4, que suena).

El uso de esta técnica, lo mejor es utilizar siempre el javac más reciente se puede encontrar! De esa manera usted tiene todas las últimas correcciones de errores y mejoras de rendimiento, y es perfectamente seguro.

EDITAR: tenga en cuenta que esto hace frente al problema de las incompatibilidades de la biblioteca, que se discutió en varias respuestas

Sólo si se compila con el interruptor javac -target 1.4.

Es obvio que no será capaz de utilizar 1.5+ características, tales como los genéricos, ejecutores, etc.

Usted también puede estar interesado en http://en.wikipedia.org/wiki/Java_backporting_tools

No creo que lo hará.

De vez en cuando (por razones demasiado complicadas de explicar), trato de ejecutar código en un 1,5 JRE que he recopilado en un 1,6 JDK. Por lo general emite una excepción java.lang.UnsupportedClassVersionError.

Sí y no. Puede ejecutar código compilado bajo Java 6 en una JVM 1.4 si se establece la "fuente" y "objetivo" opciones javac para la versión que se dirigen (por ejemplo 1.4) cuando se compila. Esto funcionará en caso de que usted no ha utilizado ninguna de las clases adicionales o características del lenguaje que se agregaron desde la versión de destino.

Buena suerte.

Sí, se puede producir archivos de clase que son compatibles con 1.4 con el 1.6 del compilador (javac), sin embargo, sólo tiene que hacer esto no es necesariamente va a producir un código que va a funcionar. El problema es que todavía habrá que compilar con la versión 1.6 de la API.

A primera vista, no es de esperar que esto sea un problema, ya que los contratos no deben cambiar, pero es - que tenía el problema de que un nuevo constructor que toma IIRC se añadió un entero a BigDecimal (en 1.5) y así en tiempo de compilación de la llamada a ese constructor se especificó sin embargo en tiempo de ejecución que no existía constructor y por lo que una excepción en tiempo de ejecución. Usted está probablemente va a tener problemas como éste cuando se sobrecargan métodos y usted está confiando en la conversión variable auto.

La aplicación javac es, de hecho, independientemente de la versión de Java que pertenece a -. Puede especificar un API diferente para usar contra 1,6 javac y el fin de evitar cualquier problema de tiempo de ejecución, deberá hacerse

Java 1.5 era una versión principal donde se introdujo enumeraciones, autoboxing y otra stuffs.while compilar obtendrá una excepción diciendo clase sin apoyo version.But si se compila con el comando javac -fuente 1.4 -target 1._ claasname.java se compilará.

Si está utilizando características de 1.5 como el boxeo de automóviles y enumeraciones en ese escenario no va a compilar ya que estas funciones no están disponibles en 1.4.In este caso tenemos que convertir nuestro código a versiones más antiguas sobre la base de algunas herramientas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top