Pregunta Gradle, "sourceCompatibility" vs "targetCompatibility"?


¿Cuál es la relación / diferencia entre sourceCompatibility y targetCompatibility? ¿Qué sucede cuando se establecen en valores diferentes?

De acuerdo a Documentación de Gradle:

sourceCompatibility es "Compatibilidad con la versión de Java para usar al compilar fuente Java". targetCompatibility es "versión de Java para generar clases para".

Mi entendimiento es que targetCompatibility generará bytecode java que sea compatible con una versión específica de Java, ¿es este un subconjunto de la funcionalidad de sourceCompatibility?


75
2018-05-20 17:31


origen


Respuestas:


esto se asigna a javac - ver la sección de compilación cruzada - la fuente es básicamente el nivel de idioma de origen y el objetivo es el nivel del bytecode que se genera.


53
2018-05-21 09:07



Ten cuidado cuando los uses; hemos sido mordidos por personas que hacen suposiciones.

El hecho de que utilice sourceCompability (o targetCompatibility) de 1.5 no significa que siempre pueda compilar su código con JDK 1.6 y esperar que funcione bajo JDK 1.5. El problema es las bibliotecas disponibles.

Si su código llama a algún método que solo está disponible en JDK 1.6, se compilará con las diversas opciones de compatibilidad para la VM objetivo. Pero cuando lo ejecute, fallará porque el método ofensivo no está presente (obtendrá una excepción MethodNotFoundException o ClassNotFoundException).

Por esta razón, yo siempre compare la configuración de compatibilidad con la versión real de Java bajo la cual estoy construyendo. Si no coinciden, fallo la compilación.


37
2018-03-11 13:22



fuenteCompatibilidad = especifica que la versión del lenguaje de programación de Java se use para compilar .Java archivos. por ejemplo, sourceCompatibility 1.6 = especifica que la versión 1.6 del lenguaje de programación Java se utilizará para compilar .Java archivos.

Por defecto sourceCompatibility = "versión de la JVM actual en uso" y targetCompatibility = sourceCompatibility 

targetCompatibility = La opción asegura que los archivos de clase generados serán compatibles con las máquinas virtuales especificadas por targetCompatibility. Tenga en cuenta que en la mayoría de los casos, el valor de la opción -target es el valor de la opción -source; en ese caso, puede omitir la opción -target.

Los archivos de clase se ejecutarán en el destino especificado por targetCompatibility y en versiones posteriores, pero no en versiones anteriores de la VM


22
2018-04-08 15:33