gpt4 book ai didi

java - 如何列出 gradle 项目的所有依赖项的 JDK 兼容性(如 "sourceCompatibility")?

转载 作者:太空宇宙 更新时间:2023-11-04 12:46:56 25 4
gpt4 key购买 nike

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

(具体来说,我正在尝试查看哪些依赖项可能使用 Streams 等 Java 8 功能,因为我正在尝试使用 Retrolambda 为 Android 进行编译,并使用 RoboVM 为 iOS 进行编译。)

最佳答案

此类信息可能不存在,并且生成起来非常繁琐。

“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 版本完全兼容的唯一方法是遍历每个类的常量池,找到每个类和方法引用,然后验证它们对于所需的 JRE 是否有效。

您需要一个自动化工具来完成此任务(如果您安装了所需的 Java 版本并且单元测试覆盖率达到 100%,则 JVM 可以做到这一点...),但我不知道有哪个独立工具可以做到这一点,而且 gradle 和项目文档通常都不包含此类信息。

关于java - 如何列出 gradle 项目的所有依赖项的 JDK 兼容性(如 "sourceCompatibility")?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36222463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com