Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何列出gradle项目中所有依赖项的JDK兼容性(如“sourceCompatibility”)?_Java_Gradle_Dependencies - Fatal编程技术网

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

Java 如何列出gradle项目中所有依赖项的JDK兼容性(如“sourceCompatibility”)?,java,gradle,dependencies,Java,Gradle,Dependencies,我需要知道我在gradle项目中使用的所有依赖项的Java运行时兼容性(就好像它在检查每个项目的“sourceCompatibility”设置一样),最好不要仔细阅读每个依赖项的文档来找到它(如果有的话)。有没有办法让gradle做到这一点?或者其他自动化工具 (具体来说,我正在尝试查看哪些依赖项可能使用Java 8功能,如Streams,因为我正在尝试使用retrolambda为Android编译,使用RoboVM为iOS编译。)此类信息可能不存在,而且生成起来非常繁琐 “sourceComp

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


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

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

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

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

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


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


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

此类信息可能不存在,而且生成过程非常繁琐

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

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

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


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

您需要一个自动化的工具来实现这一点(如果您安装了所需的Java版本并在单元测试中实现了100%的覆盖率,JVM可以做到这一点),但我不知道有哪一个独立的工具可以做到这一点,gradle和project文档通常都不包含此类信息