android gradle build.gradle android-gradle-3.0

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.