web-dev-qa-db-fra.com

La propriété CompileOptions.bootClasspath est obsolète.

Après la mise à niveau vers Gradle 4.x, je reçois l'avertissement

La propriété CompileOptions.bootClasspath est obsolète et doit être supprimée dans Gradle 5.0. Veuillez utiliser la propriété CompileOptions.bootstrapClasspath à la place.

dans l'un de mes projets. Je ne vois rien qui s'appelle bootClasspath ou similaire dans mon build.gradle . Que signifie cet avertissement?

l'avertissement apparaît uniquement dans le sous-projet commons et non dans 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/");
}
17
Simon Warta

My Gradle utilise OpenJDK 8 à partir de /usr/lib/jvm/Java-8-openjdk-AMD64/jre sur Ubuntu (voir l’ajout de println System.getProperty("Java.home") dans build.gradle. Aucun studio Android n’est impliqué.

Je peux déclencher l'avertissement en définissant explicitement sourceCompatibility et targetCompatibility sur 1.7 (valeur par défaut). En remplaçant la version Java par

Android {

    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
}

l'avertissement disparaît.

La raison pour laquelle l'avertissement est affiché pour un seul projet est qu'il ne se répète pas. commons est configuré avant core en raison de ordre alphanumérique . Lorsque je règle sourceCompatibility et targetCompatibility sur 1.8 pour commons, l'avertissement passe à core.

Définir sourceCompatibility et targetCompatibility sur 1.8 pour tous les projets supprime complètement l'avertissement. Si c'est ce que vous voulez pour votre projet et pourquoi Gradle 4 ne peut pas être utilisé sans avertissement avec 1.7, ce sont deux questions distinctes.

11
Simon Warta

Mis à part ce qui précède, je peux dire que l'erreur survient pour une construction Java. Le code référencé: CompileOptions.bootClasspath doit pointer sur un fichier JAR d'exécution Java correspondant au système cible prévu. Cela signifie, par exemple, que si vous compilez pour exécuter votre programme sur un serveur utilisant Java 6, vous devez définir la variable bootClasspath pour qu'elle pointe sur un environnement d'exécution compatible Java6, à savoir:rt.jar

Je configure normalement une variable de projet/variable d'environnement pour pointer vers ce fichier:

  • BOOT_CLASSPATH

Il se trouve normalement avec le JRE, pas dans le JDK, sauf dans le dossier jre.

Dans le script du projet Gradle, nous avons:

[compileJava, compileTestJava, ]*.options*.bootClasspath = BOOT_CLASSPATH

Définir explicitement. Cependant, dans d'autres scripts, nous ne définissons pas la bootClasspath ouvertement du tout, et avons toujours le message en question.

The CompileOptions.bootClasspath property has been deprecated
and is scheduled to be removed in Gradle 5.0. Please use the    
CompileOptions.bootstrapClasspath property instead.

... en tous cas. Je suppose donc que le plugin Java le fait lui-même en tant que comportement par défaut. Je réalise que ce n'est qu'une histoire de fond. Je peux aider à résoudre l'avertissement.

CompileOptions.bootstrapClasspath`

0
will