Androidモジュール(com.Android.library
プラグインがbuild.gradle
ファイルに適用される)とJavaモジュール(Java
プラグインはbuild.gradle
ファイルに適用されます)。 Javaモジュールのbuild.gradle
ファイル内で、以前はソースとターゲットの互換性を次のように指定していました。
apply plugin: 'Java'
compileJava {
sourceCompatibility = 1.7
targetCompatibility = 1.7
}
プロジェクトの「Androidプラグインfor Gradle」および「Gradle Wrapper」バージョンを最新リリース(それぞれ2.2.3および3.2.1)に更新したところ、Javaモジュールに警告が表示されています。次のように:
Access to 'sourceCompatibility' exceeds its access rights
Access to 'targetCompatibility' exceeds its access rights
sourceCompatibility
およびtargetCompatibility
宣言をモジュールのbuild.gradle
ファイルのルートレベルに次のように移動すると...
apply plugin: 'Java'
sourceCompatibility = 1.7
targetCompatibility = 1.7
...その後、割り当てが使用されていないことを通知する警告メッセージが表示されます。
最新のGradleリリースでJavaモジュールのソースとターゲットの互換性レベルを指定する正しい方法は何ですか?
IDEでは警告が発生しますが、最後のもの(ルートでの宣言)は正しいものであり、適切に動作する必要があると思います。それを宣言するための好ましい方法は何ですか、そして official docs には1つの例しかありません。
sourceCompatibility = 1.6
build.gradle
のルート。
CompileJavaブロック内で互換性を指定する必要があります
compileJava {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
IntelliJはこの警告を出します
「sourceCompatibility」へのアクセスがそのアクセス権を超えています
doubleパラメーターを使用する場合。
値を文字列(引用符など)にすると、警告は消えます。
-編集-
警告はIntelliJ 2016では1.8を使用する場合にのみ表示されます。2017年には、1.8
または'1.8'
(OPが指摘したように、この答えは質問に実際には当てはまりません。他の誰かが私と同じ問題を探してこのページにたどり着く場合に備えて、ここに残しておきたいです)
Androidの場合、Jeroen Wijdemansが示唆したcompileJava
ブロックは機能しません。動作するのはアプリ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
}
現在、intellij 2017.2.6は、Jackを有効にする必要があることを教えてくれます。 Androidブロック内に以下を追加して、同様にそれを行いましょう:
// https://stackoverflow.com/questions/37004069/errorjack-is-required-to-support-Java-8-language-features
jackOptions {
enabled true
}
ビルドでエラーまたは警告が発生した場合、プロジェクト全体を再構築するだけでそれらを削除できます。 (それは私のために働いた)