如何在Java模块中指定源和目标兼容性?

Adi*_*ain 9 gradle build.gradle android-gradle-plugin

我有一个Gradle项目,包括一个Android模块(该com.android.library插件应用于该build.gradle文件中)和一个Java模块(该java插件应用于该build.gradle文件中).在build.gradleJava模块的文件中,我之前指定了源和目标兼容性,如下所示:

apply plugin: 'java'

compileJava {
    sourceCompatibility = 1.7
    targetCompatibility = 1.7
}
Run Code Online (Sandbox Code Playgroud)

我刚刚将项目的"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
Run Code Online (Sandbox Code Playgroud)

如果我将sourceCompatibilitytargetCompatibility声明移动到模块build.gradle文件的根级别,如下所示......

apply plugin: 'java'

sourceCompatibility = 1.7
targetCompatibility = 1.7
Run Code Online (Sandbox Code Playgroud)

...然后我收到警告信息,告诉我没有使用任务.

在最新的Gradle版本中指定Java模块的源和目标兼容级别的正确方法是什么?

小智 13

需要在compileJava块中指定兼容性

compileJava   {
  sourceCompatibility = '1.8'
  targetCompatibility = '1.8'
}
Run Code Online (Sandbox Code Playgroud)

IntelliJ发出此警告

对"sourceCompatibility"的访问超出了其访问权限

如果你使用双参数.

当您将值设为字符串(例如引用)时,警告将消失.

- 编辑 -

此警告仅在IntelliJ 2016中使用1.8出现.2017年,使用1.8或中的警告消失'1.8'


Sta*_*lav 7

我认为最后一个(根中的声明)是正确的,并且它必须正常工作,尽管它会在 IDE 中引起警告。没有任何地方说,声明它的首选方式是什么,官方文档中只有一个示例,它的用法如下:

sourceCompatibility = 1.6
Run Code Online (Sandbox Code Playgroud)

在 的根中build.gradle