Gradle 源代码兼容性对子项目没有影响
我的计算机上安装了 Java 6 和 7。Gradle 使用 1.7(使用 检查)。但是我需要编译我的代码才能与Java 1.6兼容。据我所知,文档我可以使用该属性来执行此操作(并间接使用哪个默认值 )。gradle -v
sourceCompatibility
targetCompatibility
sourceCompatibility
因此,我将以下行添加到我的构建文件中(在根级别,而不是在任何闭包中):
sourceCompatibility = 1.6
(可以肯定的是,我也在一些试验中添加了,但这不应该有什么不同)targetCompatibility = 1.6
为了检查结果是否实际上与1.6兼容,我将生成的jar解压缩到文件夹中,并在我遇到的第一个文件上使用。但是,无论我是否设置了目标兼容性,或者我是否使用1.5而不是1.6,或者我是否将其指定为字符串(),每次javap的结果都是cd
WEB-INF/classes
javap -verbose
.class
'1.6'
minor version: 0
major version: 51
Afaik这意味着它是Java 1.7字节码,这是错误的。
任何想法为什么 -设置不起作用?还是不是检查兼容性的正确方法?sourceCompatibility
javap
更新:是的,这实际上是一个多项目构建,但我只检查了其中一个子项目的构建结果。在此子项目的构建文件中,我进行了上述更改,以确保它们实际应用。此外,我还在根项目的构建文件中添加了以下内容(@Vidya建议的那样):
allprojects {
sourceCompatibility = 1.6
targetCompatibility = 1.6
}
但这也无济于事。
更新 2:我在相关的 build.gradle 文件中检查了源代码兼容性与此代码段的设置:
compileJava.doFirst {
println "source compatibility " + sourceCompatibility
}
它显示我的源代码兼容性设置为1.7,尽管我试图将其设置为1.6。当我提取最简单的子项目并自行构建时,源代码兼容性设置正确,Java字节代码与1.6兼容。但是,即使此子项目在多项目生成中使用时也使用错误的源兼容性。
顺便说一句:我在一些子项目中使用的插件是:,,,,java
war
jetty
gwt
更新 3:我将构建的脚本更改为仅使用java插件(因此只是构造一些jar),并删除了和插件的使用。但是,尽管我在本节和一些子项目中设置了它,但所有项目仍然设置为sourceCompatibility 1.7。现在,在构建脚本中剩下的只是一些属性(maven,文件和其他子项目)的声明,要使用的存储库的声明,其他一些任务的声明(构建任务不依赖于这些任务,因此它不应该受到影响)以及创建的jar文件的清单文件的配置(我向清单文件添加了规范和实现版本和标题)。war
jetty
gwt
allprojects
我看不出这些会如何影响源兼容性设置。