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

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

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

в одном из моих проектов. Я не вижу ничего под названием bootClasspath или подобного в моей сборке .степень. Что означает это предупреждение?

предупреждение появляется только в подпроекте commons, а не в core.

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/");
}

ядро/сборка.градле:

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/");
}

person Simon Warta    schedule 26.11.2017    source источник


Ответы (3)


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

Я могу вызвать предупреждение, явно установив для 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, это два отдельных вопроса.

person Simon Warta    schedule 04.12.2017
comment
Не удалось найти метод compileOptions() - person Dwivedi Ji; 16.05.2019

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

android {

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

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

введите описание изображения здесь

Возможный вывод:

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

Использование нового JDK, который содержит bootstrapClasspath или модифицирует ваш compileOptions, решит эту проблему.

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

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

person Community    schedule 01.12.2017
comment
Спасибо, что указали мне правильное направление. Я написал более подробный ответ на основе ваших предложений, в котором не учтено любое решение JDK 9, которое не подходит для моей среды. - person Simon Warta; 04.12.2017

В дополнение к вышесказанному могу предложить, где возникает ошибка для сборки Java. Упомянутый: CompileOptions.bootClasspath должен указывать на JAR-файл времени выполнения Java, соответствующий предполагаемой целевой системе. Это означает, например, что если вы компилируете свою программу для запуска на сервере с использованием 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`

person will    schedule 07.03.2018