web-dev-qa-db-ja.com

Javaモジュールでソースとターゲットの互換性を指定するには?

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モジュールのソースとターゲットの互換性レベルを指定する正しい方法は何ですか?

9
Adil Hussain

IDEでは警告が発生しますが、最後のもの(ルートでの宣言)は正しいものであり、適切に動作する必要があると思います。それを宣言するための好ましい方法は何ですか、そして official docs には1つの例しかありません。

sourceCompatibility = 1.6

build.gradleのルート。

2
Stanislav

CompileJavaブロック内で互換性を指定する必要があります

compileJava   {
  sourceCompatibility = '1.8'
  targetCompatibility = '1.8'
}

IntelliJはこの警告を出します

「sourceCompatibility」へのアクセスがそのアクセス権を超えています

doubleパラメーターを使用する場合。

値を文字列(引用符など)にすると、警告は消えます。

-編集-

警告はIntelliJ 2016では1.8を使用する場合にのみ表示されます。2017年には、1.8または'1.8'

11

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

ビルドでエラーまたは警告が発生した場合、プロジェクト全体を再構築するだけでそれらを削除できます。 (それは私のために働いた)

0
lucidbrot