web-dev-qa-db-ja.com

CompileOptions.bootClasspathプロパティは廃止されました

Gradle 4.xにアップグレードした後、I 警告を取得

CompileOptions.bootClasspathプロパティは廃止され、Gradle 5.0で削除される予定です。代わりにCompileOptions.bootstrapClasspathプロパティを使用してください。

私のプロジェクトの1つ。 build.gradlebootClasspathまたは同様の名前が表示されません。この警告はどういう意味ですか?

警告は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/");
}
18
Simon Warta

私のGradleはUbuntuで_/usr/lib/jvm/Java-8-openjdk-AMD64/jre_のOpenJDK 8を使用しています(build.gradleにprintln System.getProperty("Java.home")を追加することで確認できます。Android St​​udioは関係ありません。

sourceCompatibilityおよびtargetCompatibilityを明示的に1.7(デフォルト値)に設定することにより、警告をトリガーできます。 Javaバージョンを

_Android {

    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
}
_

警告が消えます。

1つのプロジェクトに対してのみ警告が表示される理由は、繰り返されないためです。 commonsは、 アルファベット順 のため、coreの前に構成されます。 sourceCompatibilityに対してtargetCompatibilitycommonsを1.8に設定すると、警告はcoreに移動します。

すべてのプロジェクトでsourceCompatibilityおよびtargetCompatibilityを1.8に設定すると、警告が完全に削除されます。これがプロジェクトに必要なものであり、Gradle 4を1.7で警告なしで使用できない理由は、2つの別個の質問です。

15
Simon Warta

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

enter image description here

考えられる結論:

Android-studioのデフォルトJDKは...\Android studio\jre(埋め込みJDK)上記の画像に示すとおり。この埋め込みJDKには、非推奨のbootClasspathが含まれています。

bootstrapClasspathを含む新しいJDKを使用するか、compileOptionsを変更すると解決します。

古いJDK(埋め込み版)が新しいgradleバージョンと互換性がないのはなぜですか

何も思いつきません。

14
user6490462

上記はさておき、Javaビルドでエラーが発生する場所を提供できます。参照先:CompileOptions.bootClasspathは、目的のターゲットシステムと一致するJavaランタイムJARを指している必要があります。たとえば、Java 6、bootClasspathcompatibleJava6ランタイムを指すように設定する必要があります。つまり、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`

0
will