resource - Gradle, "sourceCompatibility" vs "targetCompatibility"?
resource android:attr/dialogcornerradius not found. (3)
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, siempre comparo la configuración de Compatibilidad con la versión de Java real bajo la cual estoy construyendo. Si no coinciden, fallo la compilación.
¿Cuál es la relación / diferencia entre sourceCompatibility
y targetCompatibility
? ¿Qué sucede cuando se establecen en valores diferentes?
De acuerdo con la 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".
Tengo entendido que targetCompatibility
generará bytecode java que es compatible con una versión específica de Java, ¿es este un subconjunto de la funcionalidad de sourceCompatibility
?
esto se asigna a javac - vea 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.
sourceCompatibility = especifica que la versión del lenguaje de programación Java se use para compilar archivos .java . por ejemplo, sourceCompatibility 1.6 = especifica que la versión 1.6 del lenguaje de programación Java se utilice para compilar archivos .java .
Por defecto sourceCompatibility = "versión de la JVM actual en uso" y targetCompatibility = sourceCompatibility
targetCompatibility = La opción garantiza 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