web-dev-qa-db-fra.com

Comment spécifier la compatibilité source et cible dans le module Java?

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?

6
Adil Hussain

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.

2
Stanislav

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'.

8
Jeroen Wijdemans

(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)

0
lucidbrot