android - La propiedad CompileOptions.bootClasspath ha quedado en desuso
gradle build.gradle (3)
Después de actualizar a Gradle 4.x, recibo la advertencia
La propiedad CompileOptions.bootClasspath ha quedado obsoleta y está programada para eliminarse en Gradle 5.0. Por favor use la propiedad CompileOptions.bootstrapClasspath en su lugar.
en uno de mis proyectos. No veo nada llamado bootClasspath
o similar en mi build.gradle . ¿Qué significa esta advertencia?
la advertencia solo aparece en el subproyecto commons , no en el núcleo .
commons / build.gradle:
apply plugin: ''com.android.library''
ext {
PUBLISH_GROUP_ID = ''com.afollestad.material-dialogs''
PUBLISH_ARTIFACT_ID = ''commons''
PUBLISH_VERSION = ''0.9.2.3''
BUILD_TOOLS = "26.0.3"
TARGET_SDK = 25
}
android {
compileSdkVersion TARGET_SDK
buildToolsVersion BUILD_TOOLS
defaultConfig {
minSdkVersion 16
targetSdkVersion TARGET_SDK
versionCode 1
versionName PUBLISH_VERSION
}
lintOptions {
checkReleaseBuilds false
}
}
dependencies {
implementation project('':core'')
}
// Changes to this block must be applied in core/build.gradle and commons/build.gradle
task("javadoc", type: Javadoc) {
description "Generates Javadoc API documentation for the main source code."
source = android.sourceSets.main.java.srcDirs
ext.androidJar = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
classpath += files(ext.androidJar)
exclude "**/BuildConfig.java"
exclude "**/R.java"
options.links("http://docs.oracle.com/javase/7/docs/api/");
options.links("http://d.android.com/reference/");
}
core / build.gradle:
apply plugin: ''com.android.library''
ext {
PUBLISH_GROUP_ID = ''com.afollestad.material-dialogs''
PUBLISH_ARTIFACT_ID = ''core''
PUBLISH_VERSION = ''0.9.2.3''
SUPPORT_LIBRARY_VERSION = ''25.4.0''
BUILD_TOOLS = "26.0.3"
TARGET_SDK = 25
}
android {
compileSdkVersion TARGET_SDK
buildToolsVersion BUILD_TOOLS
defaultConfig {
minSdkVersion 16
targetSdkVersion TARGET_SDK
versionCode 1
versionName PUBLISH_VERSION
consumerProguardFiles ''progress-proguard.txt''
}
lintOptions {
checkReleaseBuilds false
}
}
dependencies {
api "com.android.support:support-v13:$SUPPORT_LIBRARY_VERSION"
api "com.android.support:appcompat-v7:$SUPPORT_LIBRARY_VERSION"
api "com.android.support:recyclerview-v7:$SUPPORT_LIBRARY_VERSION"
api "com.android.support:support-annotations:$SUPPORT_LIBRARY_VERSION"
implementation "me.zhanghai.android.materialprogressbar:library:1.4.1"
}
// Changes to this block must be applied in core/build.gradle and commons/build.gradle
task("javadoc", type: Javadoc) {
description "Generates Javadoc API documentation for the main source code."
source = android.sourceSets.main.java.srcDirs
ext.androidJar = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
classpath += files(ext.androidJar)
exclude "**/BuildConfig.java"
exclude "**/R.java"
options.links("http://docs.oracle.com/javase/7/docs/api/");
options.links("http://d.android.com/reference/");
}
Creo que este mensaje sobre Java Classpath y el antiguo JDK, agregando esto a tu gradle lo resolverá:
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
Se recomienda usar java 9 JDK y desinstalar el anterior, luego incluirlo en la estructura de su proyecto: File
-> Other settings
-> Default project structure
.
Posible conclusión:
El JDK predeterminado para android-studio es .../Android studio/jre
(El JDK incorporado) como se muestra en la imagen de arriba. Este JDK incorporado contiene el bootClasspath en desuso.
Usando el nuevo JDK que contiene bootstrapClasspath o modifique su compileOptions
lo resolverá.
¿Por qué el antiguo JDK (Embedded One ) no es compatible con la nueva versión de Gradle ?
No tengo idea.
Dejando a un lado lo anterior, puedo ofrecer una actualización donde surge el error para una compilación Java
. La referencia: CompileOptions.bootClasspath
debe apuntar a un JAR de tiempo de ejecución de Java que coincida con el sistema de destino deseado. Eso significa, por ejemplo, que si está compilando para ejecutar su programa en un servidor utilizando Java 6, necesita configurar bootClasspath
para que apunte a un tiempo de ejecución de Java6 compatible , a saber: rt.jar
Normalmente configuro una variable de proyecto / variable de entorno para apuntar a este archivo:
-
BOOT_CLASSPATH
Normalmente vive con el JRE, no en el JDK, excepto en la carpeta jre
.
En el proyecto de script Gradle, tenemos:
[compileJava, compileTestJava, ]*.options*.bootClasspath = BOOT_CLASSPATH
Establecer explícitamente. Sin embargo, en algunos otros scripts, no configuramos el bootClasspath
abiertamente, y aún tenemos el mensaje en cuestión.
The CompileOptions.bootClasspath property has been deprecated
and is scheduled to be removed in Gradle 5.0. Please use the
CompileOptions.bootstrapClasspath property instead.
... de todos modos Por lo tanto, supongo que el complemento de Java lo está haciendo a sí mismo como un comportamiento predeterminado. Me doy cuenta de que es sólo una historia de fondo. Puedo ayudar a resolver la advertencia.
CompileOptions.bootstrapClasspath`
My Gradle está usando OpenJDK 8 de /usr/lib/jvm/java-8-openjdk-amd64/jre
en Ubuntu (vea agregando println System.getProperty("java.home")
en build.gradle. No hay ningún estudio de Android involucrado.
Puedo activar la advertencia configurando explícitamente sourceCompatibility
y targetCompatibility
en 1.7 (el valor predeterminado). Al cambiar la versión de Java a
android {
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
}
La advertencia desaparece.
La razón por la que se muestra la advertencia para un solo proyecto es que no se repite. commons
se configura antes del core
debido al orden alfanumérico . Cuando configuro sourceCompatibility
y targetCompatibility
en 1.8 para commons
, la advertencia pasa al core
.
Al establecer sourceCompatibility
y targetCompatibility
en 1.8 para todos los proyectos, se elimina la advertencia por completo. Si esto es lo que desea para su proyecto y por qué Gradle 4 no se puede usar sin advertencias, con 1.7 son dos preguntas separadas.