Gradle sourceCompatibility对子项目无效

我的机器上安装了Java 6和7。Gradle使用1.7(使用选中gradle -v)。但是我需要编译代码以与Java

1.6兼容。据我了解的文档,我可以使用sourceCompatibility属性来实现(并间接使用targetCompatibility,默认为

sourceCompatibility)。

因此,我将以下行添加到了我的构建文件中(在根级别,而不是在任何闭包中):

sourceCompatibility = 1.6

(确保targetCompatibility = 1.6在某些试验中我也添加了,但这应该没有什么不同)

为了检查结果是否实际上与1.6兼容,我将产生的jar解压缩cdWEB-INF/classes文件夹中,并javap

-verbose.class遇到的第一个文件上使用。但是,无论我设置目标兼容性还是使用1.5而不是1.6还是将其指定为字符串('1.6'),每次javap的结果都是

minor version: 0

major version: 51

Afaik这意味着它是Java 1.7字节码,这是错误的。

有什么想法为什么sourceCompatibility设置无效?还是javap检查兼容性的正确方法?

是的,这实际上是一个多项目的构建,但是我只检查了一个子项目的构建结果。在此子项目的构建文件中,我进行了提及的更改,以确保它们确实被应用。另外,我在根项目的构建文件中添加了以下内容(也建议使用@Vidya):

allprojects {

sourceCompatibility = 1.6

targetCompatibility = 1.6

}

但这也无济于事。

我在相关的build.gradle文件中使用此代码段检查了sourceCompatibility的设置:

compileJava.doFirst {

println "source compatibility " + sourceCompatibility

}

它显示了我的sourceCompatibility设置为1.7,尽管我尝试将其设置为1.6。当我提取最简单的子项目并独立构建时,sourceCompatibility设置正确,并且Java

Byte代码与1.6兼容。但是,即使在多项目构建中使用时,即使该子项目也使用了错误的sourceCompatibility。

BTW:我在一些子项目使用的插件是:javawarjettygwt

我改变了内置的脚本只使用了Java插件(因此只建造了一些罐子),除去的使用warjettygwt插件。但是尽管我在本allprojects节和某些子项目中进行了设置,但仍将所有项目都设置为sourceCompatibility

1.7

。现在,构建脚本中只剩下一些声明(Maven,文件和其他子项目),要使用的存储库的声明,其他一些任务的声明(构建任务不依赖于,因此不应该受到影响)以及为所创建的jar文件配置清单文件的方式(我向清单文件添加了规范,实现版本和标题)。

我看不到有什么会影响sourceCompatibility设置。

回答:

似乎此行为是由指定sourceCompatibilitybefore 引起的apply plugin:

'java',如果尝试在其中设置兼容性选项,则会发生这种情况allprojects

在我的设置中,可以通过以下方法解决此问题:

allprojects {

sourceCompatibility = 1.6

targetCompatibility = 1.6

}

与:

allprojects {

apply plugin: 'java'

sourceCompatibility = 1.6

targetCompatibility = 1.6

}

如果其他人可以在其他设置中对此进行验证,我们将非常高兴。

我仍然不确定是否应该将其报告为错误,但我相信此解决方案比上述解决方法更好(但是,它非常有帮助)。

以上是 Gradle sourceCompatibility对子项目无效 的全部内容, 来源链接: utcz.com/qa/430109.html

回到顶部