如何使用gradle项目列出所有依赖项的JDK兼容性(如“sourceCompatibility”)?

时间:2016-03-25 15:03:36

标签: java gradle dependencies

我需要知道我在gradle项目中使用的所有依赖项的Java运行时兼容性(好像它正在检查每个项目的“sourceCompatibility”设置),最好不要仔细阅读每个依赖项的文档来找到它,如果它在那里。有没有办法用gradle做到这一点?甚至是其他一些自动化工具?

(具体来说,我正在尝试查看哪些依赖项可能正在使用像Streams这样的Java 8功能,因为我正在尝试使用retrolambda和带有RoboVM的iOS编译Android。)

1 个答案:

答案 0 :(得分:0)

这些信息可能不存在,生成起来非常繁琐。

编译源代码后,“sourceCompatibility”不存在 - 只是告诉编译器如何解释源语法。您更感兴趣的是“targetCompatibility”,或类文件格式主要版本:Java 8是52,Java 7是51等。

这告诉Java需要Java 8来理解类中包含的类格式和字节码,因此可以下载并解压缩项目中的每个依赖项及其所有依赖项,然后查看每个类文件的版本号,除了......

只是查看类文件格式版本并不会告诉您该类是否引用仅存在于特定版本的JDK中的方法和字段。我没有使用Java 8进行测试,但是在Java 7中,可以将源/目标兼容性设置为1.6,并且仍然引用在Java 7中添加的新方法.Java 6 JVM将加载并运行该文件,但是失败了NoSuchMethodException尽管看起来非常好。

实际检查依赖项是否与Java编译的Java版本完全兼容的唯一方法是遍历每个类的常量池,找到每个类和方法引用,然后验证它们适用于所需的JRE。

你需要一个自动化的工具(如果你已经安装了所需的Java版本并且你的单元测试中有100%的覆盖率,那么JVM可以做到这一点......)但是我不知道一个独立的工具并且,gradle和项目文档通常都不包含此类信息。