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.
时也有效
我需要分析 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.