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

新手上路,请多包涵

我有一个 Gradle 项目,由一个 Android 模块( com.android.library 插件应用于 build.gradle 文件)和一个 Java 模块( java 插件应用)组成 build.gradle 文件)。在 Java 模块的 build.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

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

 apply plugin: 'java'

sourceCompatibility = 1.7
targetCompatibility = 1.7

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

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

原文由 Adil Hussain 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 724
2 个回答

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

 sourceCompatibility = 1.6

build.gradle 的根目录中。

原文由 Stanislav 发布,翻译遵循 CC BY-SA 3.0 许可协议

需要在 compileJava 块中指定兼容性

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

IntelliJ 发出此警告

对“sourceCompatibility”的访问超出了其访问权限

如果你使用双参数。

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

- 编辑 -

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

原文由 Jeroen Wijdemans 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题