jdeps等效于Java 7

时间:2017-02-10 10:13:05

标签: java jdeps

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

jdeps -v example.jar

产生此输出。不幸的是,如果用户只有JDK 1.7,我需要一个有效的解决方案。怎么可以实现呢?

3 个答案:

答案 0 :(得分:2)

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

我使用cygwin来获取我的结果,但您应该能够在任何环境中执行此操作,您只需要解压缩工具javap和执行正则表达式的工具。在当前的Windows版本中,powershell会提供这些功能。

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

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文件中引用的类,所以假设你不想要每个类的细节,这应该有效:

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

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

您还将检索限定名称以L开头的类:这表示数组,如果您只关心类名,则可能需要删除该L.还有其他类似的单字母修饰符,我无法记住。

答案 1 :(得分:1)

使用JD Java Decompiler(http://jd.benow.ca/)。

答案 2 :(得分:1)

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