我需要分析jar中不同.class
文件使用(引用)的类。我知道
jdeps -v example.jar
产生此输出。不幸的是,如果用户只有JDK 1.7,我需要一个有效的解决方案。怎么可以实现呢?
答案 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,这也适用。