jdeps 相当于 Java 7

jdeps equivalent for Java 7

我需要分析 jar 中的不同 .class 文件使用(引用)了哪些 类。我知道

jdeps -v example.jar

产生这个输出。不幸的是,如果用户只有 JDK 1.7,我需要一个可行的解决方案。这是如何实现的?

使用 JD Java 反编译器 (http://jd.benow.ca/)。

我已经能够使用 javap -c 和正则表达式过滤器获得看似不错的结果。

我是用cygwin来获取结果的,但是你应该可以在任何环境下做这个,你只需要一个解压工具,javap和一个执行正则表达式的工具.在当前的 Windows 版本中,powershell 将提供这些功能。

以下代码将列出 jar 文件中每个 class 引用的 classes :

mkdir workDir
unzip yourJar.jar -d workDir
shopt -s globstar
for classFile in **/*.class; do
    echo "Classes used in $classFile :"
    javap -c "$classFile" | grep -Eo "([a-zA-Z0-9]+/)+[A-Z][a-zA-Z0-9]*" | sort -u
    echo
done

您说您想要 jar 文件中引用的 classes,所以假设您不想要每个 class 的详细信息,这应该可行:

mkdir workDir
unzip yourJar.jar -d workDir
shopt -s globstar
for classFile in **/*.class; do
    javap -c "$classFile" | grep -Eo "([a-zA-Z0-9]+/)+[A-Z][a-zA-Z0-9]*" 
done | sort -u

请注意,这将遗漏 class 不遵循约定的元素,例如在默认包中定义的或者其名称不是以大写字母开头的。

您还将检索 classes 其限定名称以 L 开头:这表示数组,如果您只关心 class ,您可能想要删除那个 L姓名。还有其他类似的 single-letters 修饰符我不记得了。

另一种解决方案是将 JDK1.8 放在可访问的网络驱动器上并在那里调用 jdeps。这甚至在本地 JDK 是 1.7.

时也有效