2016-12-07 28 views
3

我有一個由Android模塊(com.android.library插件應用於build.gradle文件)和Java模塊(java插件應用於build.gradle文件)的Gradle項目。內build.gradle文件中的Java模塊的我以前指定的源和目標的兼容性如下:如何在Java模塊中指定源和目標兼容性?

apply plugin: 'java' 

compileJava { 
    sourceCompatibility = 1.7 
    targetCompatibility = 1.7 
} 

我剛剛更新了項目的「Android的插件搖籃」和「搖籃包裝」的版本到最新版本(2.2.3和3.2.1分別),我現在看到了Java模塊中的警告如下:

Access to 'sourceCompatibility' exceeds its access rights 
Access to 'targetCompatibility' exceeds its access rights 

如果我移動sourceCompatibilitytargetCompatibility聲明到模塊的build.gradle文件的根級別以下...

apply plugin: 'java' 

sourceCompatibility = 1.7 
targetCompatibility = 1.7 

...然後我收到警告消息,告訴我沒有使用任務。

在最新的Gradle版本中指定Java模塊的源和目標兼容級別的正確方式是什麼?

回答

2

我認爲最後一個(聲明在根中)是正確的,它必須正常工作,儘管它會在IDE中引發警告。它遠不說,什麼是聲明它的首選方式,並沒有在official docs,在那裏它作爲一個例子:

sourceCompatibility = 1.6 

build.gradle的根源。

5

兼容性需要compileJava塊

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

的IntelliJ給出了這樣的警告

訪問 'sourceCompatibility' 裏面指定超出其訪問權限

,如果您使用的是雙參數。

當您將該值設置爲一個字符串(例如引號)時,該警告將消失。

- 編輯 -

警告在2016年的IntelliJ只出現使用1.8在2017年警告使用或者1.8'1.8'

0

(由OP指出,這個答案沒有按」走了這個問題真的很適合,爲了防止別人登陸這個頁面尋找和我一樣的問題,我想盡量把它放在最下面)

對於android,阻止Jeroen Wijdemans建議,不起作用。 什麼工作是在應用程序中指定的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日告訴我,那麼你需要啓用傑克。因此,讓我們做到這一點爲好,加入了android塊內的以下內容:

// https://stackoverflow.com/questions/37004069/errorjack-is-required-to-support-java-8-language-features 
    jackOptions { 
     enabled true 
    } 

如果建築現在將會導致錯誤或警告,簡單地去重建整個項目可能擺脫他們。 (它對我有用)

+0

請重新閱讀這個問題。問題在於爲應用'java' Gradle插件的Gradle項目/模塊設置Java語言級別。這不是爲應用'com.android.application'或'com.android.library' Gradle插件的Gradle項目/模塊設置Java語言級別。 –