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

时间:2019-05-06 09:39:09

标签: java gradle intellij-idea

我在gradle.properties中使用sourceCompatibility = 1.7,Gradle JVM(设置,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项目?

1 个答案:

答案 0 :(得分:0)

这可能是由于Why does this program compile with Java 7 but not 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工程师没有为旧的行为实现向后兼容模式。

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