2016-12-07 117 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语言级别。 –