升级到Gradle 4.x后,我get the warning
不推荐使用CompileOptions.bootClasspath属性,并计划在Gradle 5.0中将其删除。请改用CompileOptions.bootstrapClasspath属性。
在我的一个项目中。我的build.gradle中没有看到任何名为bootClasspath
或类似内容的内容。这个警告意味着什么?
警告只会出现在 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/");
}
答案 0 :(得分:15)
My Gradle在Ubuntu上使用来自/usr/lib/jvm/java-8-openjdk-amd64/jre
的OpenJDK 8(请参阅build.gradle中添加println System.getProperty("java.home")
。不涉及Android Studio。
我可以通过将sourceCompatibility
和targetCompatibility
明确设置为1.7(默认值)来触发警告。通过将Java版本更改为
android {
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
}
警告消失了。
仅针对一个项目显示警告的原因是不再重复。由于alphanumerical ordering,commons
之前配置了core
。当我为sourceCompatibility
设置targetCompatibility
和commons
为1.8时,警告将移至core
。
将所有项目的sourceCompatibility
和targetCompatibility
设置为1.8会完全删除警告。如果这是你想要的项目,以及为什么Gradle 4不能免费使用1.7是两个单独的问题。
答案 1 :(得分:14)
我认为这条关于java Classpath和旧JDK的消息,将其添加到您的gradle将解决它:
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
建议使用java 9 JDK并卸载旧版本,然后将其包含在项目结构中:File
- > Other settings
- > Default project structure
。
可能的结论:
android-studio的默认JDK是...\Android studio\jre
(嵌入式JDK),如上图所示。此嵌入式JDK包含已弃用的 bootClasspath 。
使用包含 bootstrapClasspath 的新JDK或修改compileOptions
将解决此问题。
为什么旧的JDK(嵌入式版本)与新的 gradle版本不兼容?
我不知道。
答案 2 :(得分:0)
除了上述内容之外,我可以提供Java
版本出错的地方。引用的:CompileOptions.bootClasspath
必须指向与预期目标系统匹配的Java运行时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`