Свойство CompileOptions.bootClasspath устарело

После обновления до Gradle 4.x я получаю предупреждение

Свойство CompileOptions.bootClasspath устарело и должно быть удалено в Gradle 5.0. Вместо этого используйте свойство CompileOptions.bootstrapClasspath.

в одном из моих проектов. Я не вижу ничего, что называется bootClasspath или аналогичным в моем build.gradle. Что означает это предупреждение?

предупреждение появляется только в подпроекте 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/");
}

ядро /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/");
}

Ответ 1

My Gradle использует OpenJDK 8 из /usr/lib/jvm/java-8-openjdk-amd64/jre на Ubuntu (см. Добавление println System.getProperty("java.home") в build.gradle.

Я могу вызвать предупреждение, явно устанавливая sourceCompatibility и targetCompatibility в 1.7 (значение по умолчанию). Изменив версию Java на

android {

    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
}

предупреждение исчезает.

Причина, по которой предупреждение отображается только для одного проекта, заключается в том, что он не повторяется. commons настраивается перед core из-за буквенно-цифрового упорядочения. Когда я устанавливаю sourceCompatibility и targetCompatibility в 1.8 для commons, предупреждение переходит к core.

Установка sourceCompatibility и targetCompatibility для 1.8 для всех проектов полностью исключает предупреждение. Если это то, что вы хотите для своего проекта, и почему Gradle 4 не может использоваться без предупреждения с 1.7, это два отдельных вопроса.

Ответ 2

Я думаю, что это сообщение о java Classpath и старом JDK, добавив это вашему градиенту, решит его:

android {

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

Рекомендуется использовать java 9 JDK и удалить старый, а затем включить его в структуру вашего проекта: FileOther settingsDefault project structure.

enter image description here

Возможное заключение:

По умолчанию JDK для android-studio - это ...\Android studio\jre (встроенный JDK), как показано на рисунке выше. Этот встроенный JDK содержит устаревший bootClasspath.

Использование нового JDK, которое содержит bootstrapClasspath или изменение вашего compileOptions, решит его.

Почему старый JDK (встроенный) не совместим с новой версией gradle?

Я понятия не имею.

Ответ 3

Вышеизложенное, я могу предложить, где возникает ошибка для сборки Java. Указанный: CompileOptions.bootClasspath должен указывать на JAR-время выполнения JAR, соответствующее целевой целевой системе. Это означает, например, что если вы компилируете свою программу на сервере с использованием Java 6, вам нужно установить bootClasspath на совместимую среду выполнения Java6, а именно: rt.jar

Я обычно настраиваю переменную проекта/переменную среды, чтобы указать на этот файл:

  • BOOT_CLASSPATH

Обычно он работает с JRE, а не в JDK, за исключением папки jre.

В сценарии проекта Gradle мы имеем:

[compileJava, compileTestJava, ]*.options*.bootClasspath = BOOT_CLASSPATH

Установите явно. Однако в некоторых других сценариях мы вообще не устанавливаем bootClasspath и все еще имеем соответствующее сообщение.

The CompileOptions.bootClasspath property has been deprecated
and is scheduled to be removed in Gradle 5.0. Please use the    
CompileOptions.bootstrapClasspath property instead.

... тем не мение. Я предполагаю, что плагин Java делает это сам по себе как поведение по умолчанию. Я понимаю, что это только фоновая история. Я могу помочь разрешить предупреждение.

CompileOptions.bootstrapClasspath"