程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Gradle sourceCompatibility对子项目无效大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Gradle sourceCompatibility对子项目无效?

开发过程中遇到Gradle sourceCompatibility对子项目无效的问题如何解决?下面主要结合日常开发的经验,给出你关于Gradle sourceCompatibility对子项目无效的解决方法建议,希望对你解决Gradle sourceCompatibility对子项目无效有所启发或帮助;

似乎此行为是由指定sourceCompatibility before 引起的apply plugin: 'java',如果尝试在其中设置兼容性选项,则会发生这种情况allprojects

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

allprojects {
    sourceCompatibility = 1.6
    targetCompatibility = 1.6
}

与:

allprojects {
    apply plugin: 'java'
    sourceCompatibility = 1.6
    targetCompatibility = 1.6
}

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

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

解决方法

我的机器上安装了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的结果都是

@H_348_3@minor version: 0
major version: 51

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

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

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

allprojects {
    sourceCompatibility = 1.6
    targetCompatibility = 1.6
}

但这也无济于事。

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

compileJava.doFirst {
    println "source compatibility " + sourceCompatibility
}

它显示了我的sourceCompatibility设置为1.7,尽管我尝试将其设置为1.6。当我提取最简单的子项目并独立构建时,sourceCompatibility设置正确,并且Java
Byte代码与1.6兼容。但是,即使在多项目构建中使用时,即使该子项目也使用了错误的sourceCompatibility。

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

更新3:
我改变了内置的脚本只使用了Java插件(因此只建造了一些罐子),除去的使用warjettygwt插件。但是尽管我在本allprojects节和某些子项目中进行了设置,但仍将所有项目都设置为sourceCompatibility
1.7
。现在,构建脚本中只剩下一些声明(Maven,文件和其他子项目),要使用的存储库的声明,其他一些任务的声明(构建任务不依赖于,因此不应该受到影响)以及为所创建的jar文件配置清单文件的方式(我向清单文件添加了规范,实现版本和标题)。

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

大佬总结

以上是大佬教程为你收集整理的Gradle sourceCompatibility对子项目无效全部内容,希望文章能够帮你解决Gradle sourceCompatibility对子项目无效所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。