jre jdk for developers java javac java-7 java-6

jdk - ¿Es posible compilar archivos de clase con el SDK de Java 7 que puede ejecutarse en Java 6 JVMs?



jre 11 download (4)

Ya que el público Java 6 SE JRE se está acercando a su EOL (noviembre de 2012), estoy considerando transferir mis proyectos de Java 6 a Java 7. Esto no sería un gran problema, si Apple proporcionara un Java 7 JRE. para Mac OS X. Pero como Apple no está dispuesto a hacerlo, todavía tengo que apoyar a los usuarios que solo tienen un Java 6 JRE.

¿Hay alguna manera de compilar binarios compatibles con Java 6 (archivos de clase) con Java 7 javac? Ciertamente, soy consciente de que no puedo usar las nuevas características de Java 7 cuando lo hago.

Gracias de antemano!


La respuesta de Stephen C es correcta, pero no completa. Sus programas Java 7 no se compilarán en Java 6 si utilizan las características del lenguaje Java 7, pero se les advertirá que otros errores sutiles aún pueden ocurrir con un desarrollador de codificación en Java 6 y otro compilando Java 7.

Tomemos por ejemplo java.sql.Driver. En Java 7, la interfaz ganó un método adicional.

Desarrollador Java 7 Este desarrollador implementa la interfaz del controlador y utiliza la anotación "Anular" en el método del controlador adicional implementado. El programa compila bien como un programa de Java 6 porque la clase que ve el compilador de Java 6 tiene ese método y el código se verifica. La compilación del programa como Java 6 no significa que el compilador de Java 6 cambiará automáticamente para usar la fuente de Java 6 ¡código!

Desarrollador de Java 6 El desarrollador de Java 6 intenta compilar el código que el desarrollador de Java 7 cometió y obtiene un error de compilación a pesar de que el desarrollador de Java 7 no estaba implementando ninguna construcción de lenguaje Java 7.

En consecuencia, aunque podría compilarlo como Java 6, recomendaría no hacerlo.


Sí, pero en algunos casos no. En Java 1.6 no tenían el try con recursos, switch con cadenas o declaraciones de captura múltiple, etc. Así que esas partes del programa no se compilarán. Pero la idea de java es compilar una vez, correr por todas partes; así que el código puede funcionar en JVMs antiguas


Tengo jdk6 instalado. Si revisas la página man de javac:

Cross-Compilation Options By default, classes are compiled against the bootstrap and extension classes of the platform that javac shipped with. But javac also supports cross-compil‐ ing, where classes are compiled against a bootstrap and extension classes of a different Java platform implementation. It is important to use -bootclasspath and -extdirs when cross-compiling; see Cross-Compilation Example below. -target version Generate class files that target a specified version of the VM. Class files will run on the specified target and on later versions, but not on earlier versions of the VM. Valid targets are 1.1 1.2 1.3 1.4 1.5 (also 5) and 1.6 (also 6).


Depende. Si su programa no usa las nuevas extensiones de lenguaje Java 7, entonces puede ejecutar el compilador de Java con las -source 1.6 y -source 1.6 . Pero si usa las extensiones de lenguaje Java 7, entonces -source 1.6 resultará en errores de compilación.

Ciertamente, soy consciente de que no puedo usar las nuevas características de Java 7 cuando lo hago.

Eso incluye las características del lenguaje Java 7 ... y las dependencias de los cambios de Java 7 a las API de la biblioteca de clases estándar. También tenga en cuenta que hay un pequeño número de diferencias de comportamiento (también conocidas como correcciones de errores de API) que pueden hacer que el código se ejecute de manera diferente en Java 6 y Java 7. Deben describirse en el documento de transición de Java 6 a Java 7.

ACTUALIZACIÓN : es probable que esto ya no sea un problema para usted, ya que Oracle lanzó Java 7 para Mac OSX.