我在Gradle.properties中使用sourceCompatibility=1.7,Gradle JVM(设置,Gradle,Intellij IDEA)是1.8.0_171和
wrapper {
gradleVersion = '5.3'
distributionType = 'ALL'
}
在大楼里。
当我运行构建任务(tasks->build->build Intellij IDEA)时,我在compileJava任务期间得到“错误:不兼容类型:推断的类型不符合等式约束”。
如果我将Gradle JVM设置为1.7.0_80并且
wrapper {
gradleVersion = '4.3'
distributionType = 'ALL'
}
build很好。
我做错了什么?如何使用Gradle5.3构建Java7项目?
这可能是由于Java7和Java8之间泛型的类型检查规则发生了细微的变化造成的,正如在“为什么这个程序用Java7而不是Java8编译”中所描述的那样?
那么解决方案是什么呢?
我怀疑你会找到一个神奇的编译器开关或其他东西只是使它工作。实际上,我认为你的选择是:
如果这是一个开源产品,请检查产品的问题检查器,看看是否有人已经报告了该问题。他们可能也报告了一个修复。
查看您正在尝试编译的源代码,确定编译错误的原因并修复它。如果这是一个开源产品,提交您的修补程序作为补丁。
请注意,这些编译错误报告的可能是一个潜在的bug,在某些情况下可能导致意外的运行时异常。
你说:
我认为sourceCompatibility=1.7将为compile*.java设置Java7。
的确如此。然而,也有一定程度的兼容性。
(额外的模式可能会使一个已经很复杂的软件变得很难维护。类型检查和类型推断是编译器实现中比较困难的方面之一。)
嗨,我有多项目分级设置 所有的工作都很好,但有一件事让我抓狂。在生成脚本中: 当我从命令行“gradlew”调用时<-默认任务将被执行 当我从命令行“gradlew tasks”<-task“All task runnable from root project”下调用时,我看到“build” 但当我尝试添加dependsOn('build')、dependsOn(':build')或depend
(当然,我还在一些试验中添加了,但这不会有什么不同) 为了检查结果是否与1.6实际兼容,我将得到的jar、解压缩到文件夹中,并在遇到的第一个文件上使用。但是无论我是否设置了目标兼容性,或者我是否使用1.5而不是1.6或者我是否将其指定为字符串(),每次javap的结果都是 这意味着它是Java1.7字节码,这是错误的。 有什么想法为什么-设置不起作用吗?还是不是检查兼容性的正确方法? 更新:是的,
3.3.3 Android 任务 Android plugin 使用了同样的约定规则以和其他插件保持兼容,并且又添加了一些额外的引导任务: assemble 这个任务会汇集工程的所有输出。 check 这个任务会执行所有校验检查 connectedCheck 运行 checks 需要一个连接的设备或者模拟器,这些checks将会同时运行在所有连接的设备上。 deviceCheck 通过 API 连
6.5 构建和任务 我们在前面说过,每一个 Build Type 都会创建它自己的 assemble\ 任务,但是 Build Variants 的任务则是 Build Type 和 Product Flavor 的组合。 当 Product Flavors 被使用的时候,更多的 assemble-type 任务被创建,他们是: assemble\ 允许直接构建一个 variant 版本。例如 a
7.2 操纵任务 普通的 Java 工程有一个有限的任务集合,这些任务相互配合创建一个输出。 classes 是一个编译Java源代码的任务。 在 build.gradle 中通过脚本访问和使用 classes 任务是很简单的。可以通过 project.tasks.classes 快捷访问。 对于 Android 工程来说就比较复杂了,因为可能有很多相同的任务,他们的名字是基于 Build Typ
我们前面提到每一个Build Type会创建自己的assemble< name >task,但是Build Variant是Build Type和Product Flavor的组合。 当使用Product Flavor的时候,将会创建更多的assemble-type task。分别是: assemble< Variant Name > 允许直接构建一个Variant版本,例如assembleFla