Gradle 4.xにアップグレードした後、I 警告を取得
CompileOptions.bootClasspathプロパティは廃止され、Gradle 5.0で削除される予定です。代わりにCompileOptions.bootstrapClasspathプロパティを使用してください。
私のプロジェクトの1つ。 build.gradle に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/");
}
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/");
}
私の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
}
}
_
警告が消えます。
1つのプロジェクトに対してのみ警告が表示される理由は、繰り返されないためです。 commons
は、 アルファベット順 のため、core
の前に構成されます。 sourceCompatibility
に対してtargetCompatibility
とcommons
を1.8に設定すると、警告はcore
に移動します。
すべてのプロジェクトでsourceCompatibility
およびtargetCompatibility
を1.8に設定すると、警告が完全に削除されます。これがプロジェクトに必要なものであり、Gradle 4を1.7で警告なしで使用できない理由は、2つの別個の質問です。
Javaクラスパスと古いJDKについてのこのメッセージは、これをgradleに追加すると解決します。
Android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
Java 9 JDKを使用し、古いJDKをアンインストールしてからプロジェクト構造に含めることをお勧めします:File
-> Other settings
-> Default project structure
。
考えられる結論:
Android-studioのデフォルトJDKは...\Android studio\jre
(埋め込みJDK)上記の画像に示すとおり。この埋め込みJDKには、非推奨のbootClasspathが含まれています。
bootstrapClasspathを含む新しいJDKを使用するか、compileOptions
を変更すると解決します。
古いJDK(埋め込み版)が新しいgradleバージョンと互換性がないのはなぜですか?
何も思いつきません。
上記はさておき、Java
ビルドでエラーが発生する場所を提供できます。参照先:CompileOptions.bootClasspath
は、目的のターゲットシステムと一致するJavaランタイムJARを指している必要があります。たとえば、Java 6、bootClasspath
がcompatibleJava6ランタイムを指すように設定する必要があります。つまり、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`