J'ai un projet Gradle composé d'un module Android (le plugin com.Android.library
est appliqué dans le fichier build.gradle
) et d'un module Java (le plugin Java
est appliqué dans le fichier build.gradle
). Dans le fichier build.gradle
du module Java, je spécifiais précédemment la compatibilité source et cible de la manière suivante:
apply plugin: 'Java'
compileJava {
sourceCompatibility = 1.7
targetCompatibility = 1.7
}
Je viens de mettre à jour les versions "Android Plugin for Gradle" et "Gradle Wrapper" du projet vers les versions les plus récentes (2.2.3 et 3.2.1 respectivement) et les avertissements suivants apparaissent dans le module Java:
Access to 'sourceCompatibility' exceeds its access rights
Access to 'targetCompatibility' exceeds its access rights
Si je déplace les déclarations sourceCompatibility
et targetCompatibility
au niveau racine du fichier build.gradle
du module comme suit ...
apply plugin: 'Java'
sourceCompatibility = 1.7
targetCompatibility = 1.7
... puis des messages d'avertissement m'indiquent que les assignations ne sont pas utilisées.
Quelle est la manière correcte de spécifier les niveaux de compatibilité source et cible d'un module Java dans la dernière version de Gradle?
Je pense que la dernière (déclaration à la racine) est la bonne et qu'elle doit fonctionner correctement, même si cela provoque des avertissements dans l'EDI. C'est nulle part dit, quel est le moyen préféré pour le déclarer et il n'y a qu'un exemple dans la documentation officielle , où il est utilisé comme:
sourceCompatibility = 1.6
à la racine du build.gradle
.
La compatibilité doit être spécifiée à l'intérieur du bloc compileJava
compileJava {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
IntelliJ donne cet avertissement
L'accès à 'sourceCompatibility' dépasse ses droits d'accès
si vous utilisez un double paramètre.
Lorsque vous transformez la valeur en chaîne (par exemple, entre guillemets), l'avertissement disparaît.
--modifier--
l'avertissement apparaît uniquement avec 1.8 dans IntelliJ 2016. En 2017, l'avertissement a été supprimé avec 1.8
ou '1.8'
.
(Comme l'a souligné le PO, cette réponse ne correspond pas vraiment à la question. J'aimerais cependant la garder au bas de la page, au cas où quelqu'un d'autre atterrirait sur cette page à la recherche du même problème que moi)
Pour Android, le bloc compileJava
proposé par Jeroen Wijdemans ne fonctionne pas . Ce qui fonctionne fonctionne bien dans l'application build.gradle.
// https://developer.Android.com/studio/write/Java8-support.html
// Configure only for each module that uses Java 8
// language features (either in its source code or
// through dependencies).
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
Actuellement, intellij 2017.2.6 me dit alors que vous devez activer Jack. Faisons-le également en ajoutant les éléments suivants dans le bloc Android:
// https://stackoverflow.com/questions/37004069/errorjack-is-required-to-support-Java-8-language-features
jackOptions {
enabled true
}
Si la construction entraîne maintenant des erreurs ou des avertissements, il suffit de reconstruire tout le projet pour les éliminer. (Cela a fonctionné pour moi)