jdeps equivalent for Java 7



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

jdeps -v example.jar

产生该输出。不幸的是,如果用户只有JDK1.7,我需要一个有效的解决方案。这是如何实现的?

我已经能够使用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。还有其他类似的单字母修饰语我记不清了。

使用JD Java解压缩器(http://jd.benow.ca/)。

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

相关内容

  • 没有找到相关文章

最新更新