繁体   English   中英

构建任务和sourceCompatibility = 1.7问题,gradle 5.3

[英]A problem with build task and sourceCompatibility = 1.7, gradle 5.3

我在gradle.properties中使用sourceCompatibility = 1.7,Gradle JVM(Settings,Gradle,Intellij IDEA)是1.8.0_171和

wrapper {
    gradleVersion = '5.3'
    distributionType = 'ALL'
}

在build.gradle中。

当我运行build任务(Tasks-> build-> build Intellij IDEA)时,在compileJava任务期间收到“错误:不兼容的类型:推断的类型不符合相等约束”。

如果我设置Gradle JVM是1.7.0_80和

wrapper {
    gradleVersion = '4.3'
    distributionType = 'ALL'
}

建立很好。

我做错了什么? 如何使用Gradle 5.3构建JAVA 7项目?

这可能是由于Java 7和Java 8之间泛型的类型检查规则发生了细微的变化而引起的,如本程序为什么用Java 7而不是Java 8进行编译中所述

那么解决方案是什么?

我怀疑您会发现一个神奇的编译器开关或某种使其工作的东西。 实际上,我认为您的选择是:

  1. 您可以像在开始时一样在Java 7平台上进行编译。 但这不是一个好的长期解决方案。

  2. 如果这是受支持的产品,请提出支持请求。

  3. 如果这是开源产品,请检查产品的问题检查器,以查看是否有人已经报告了该问题。 他们可能还报告了修复程序。

  4. 查看您尝试编译的源代码,找出导致编译错误的原因并进行修复。 如果这是一个开源产品,请以补丁程序提交您的修订。

请注意,这些编译错误可能正在报告一个潜在的错误,在某些情况下可能会导致意外的运行时异常。


你说:

我认为sourceCompatibility = 1.7将设置Java 7来编译* .java。

是的 但是,存在一定程度的兼容性。

当您使用-source 1.7运行Java 8编译器时,实际上只是在关闭对新语言功能的支持。 在后台,编译器仍然是Java 8编译器。 如果在类型检查器中进行了细微的更改,则可以认为Java工程师没有为旧的行为实现向后兼容模式。

(额外的模式可能会使已经很复杂的软件难以维护。类型检查和类型推断是编译器实现中较困难的方面之一。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM