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

我有一个Gradle项目,由一个Android模块(插件应用于文件)和一个Java模块(插件应用于文件)组成。在 Java 模块的文件中,我之前指定了源和目标兼容性,如下所示:com.android.librarybuild.gradlejavabuild.gradlebuild.gradle

apply plugin: 'java'

compileJava {
    sourceCompatibility = 1.7
    targetCompatibility = 1.7
}

我刚刚将项目的“Android Plugin 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

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

apply plugin: 'java'

sourceCompatibility = 1.7
targetCompatibility = 1.7

...然后我收到警告消息,告诉我分配未被使用。

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


答案 1

需要在编译 Java 块中指定兼容性

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

IntelliJ 给出了此警告

访问“源兼容性”超出了其访问权限

如果使用双精度参数。

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

--编辑--

警告仅在 IntelliJ 2016 中使用 1.8 出现。在2017年,警告消失了,使用或1.8'1.8'


答案 2

我认为最后一个(根中的声明)是正确的,它必须正常工作,尽管它会导致IDE中的警告。它没有说,什么是声明它的首选方式,在官方文档中只有一个例子,它被用作:

sourceCompatibility = 1.6

在 的根目录中。build.gradle


推荐