我在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项目?
答案 0 :(得分:0)
这可能是由于Why does this program compile with Java 7 but not Java 8?
中所述的Java 7和Java 8之间泛型的类型检查规则的细微变化引起的那该怎么办?
我怀疑您会发现一个神奇的编译器开关或一些使其工作的东西。实际上,我认为您的选择是:
您可以像在开始时一样在Java 7平台上进行编译。但这不是一个好的长期解决方案。
如果这是受支持的产品,请提出支持请求。
如果这是一个开源产品,请检查产品的问题检查器,以查看是否有人已经报告了该问题。他们可能也已经报告了修复程序。
查看要尝试编译的源代码,找出导致编译错误的原因并进行修复。如果这是开源产品,请以补丁程序形式提交您的修补程序。
请注意,这些编译错误可能正在报告潜在的错误,在某些情况下可能会导致意外的运行时异常。
您说:
我认为sourceCompatibility = 1.7将设置Java 7来编译* .java。
是的。但是,存在一定程度的兼容性。
使用-source 1.7
运行Java 8编译器时,实际上只是在关闭对新语言功能的支持。在后台,编译器仍然是Java 8编译器。如果在类型检查器中进行了细微的更改,则可以认为Java工程师没有为旧的行为实现向后兼容模式。
(额外的模式可能会使本来就很复杂的软件难以维护。类型检查和类型推断是编译器实现中较困难的方面之一。)