Свойство 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 и удалить старый, а затем включить его в структуру вашего проекта: File
→ Other settings
→ Default project structure
.
Возможное заключение:
По умолчанию 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
Я обычно настраиваю переменную проекта/переменную среды, чтобы указать на этот файл:
Обычно он работает с 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"