“jdeps,即“java dependencies” 的缩写,是Java8中提供的一个工具。”
jdeps命令显示Java类文件的包级或类级依赖关系。输入类可以是.class文件、目录、jar文件的路径名,或者可以是完全限定的类名称,以分析所有类文件。jdeps的参数选项决定了输出的内容。默认情况下,JDEPS将依赖关系输出到系统输出(控制台)。它可以用DOT语言生成依赖关系(见 -dotoutput 参数)。
在这篇文章里,我创建了一个简单的 Maven 项目cat-maven-simple,在这个项目里依赖了 Java 本身的一些库,另外依赖了fastjson这个库。我将其打包为 cat-maven-simple.jar,然后使用 JDK8提供的 jdeps 工具分析它的依赖,看看这个工具会输出什么结果。
01
—
创建一个简单的Maven项目
使用Idea新建项目 cat-maven-simple,添加依赖如下:
com.alibaba
fastjson
1.2.47
完整的 pom.xml 如下:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
me.zebe
cat-maven-simple
1.0-SNAPSHOT
com.alibaba
fastjson
1.2.47
org.apache.maven.plugins
maven-compiler-plugin
8
8
packageme.zebe.cat.maven;
importcom.alibaba.fastjson.JSONObject;
importjava.time.LocalDate;
importjava.time.format.DateTimeFormatter;
importjava.time.format.FormatStyle;
importjava.util.HashMap;
importjava.util.Map;
/**
*简单Maven项目例子
*
*@authorZebe
*/
public classCatMavenSimpleDemo {
/**
*运行入口
*
*@paramargs运行参数
*/
public static voidmain(String[] args) {
LocalDate today = LocalDate.now();
Map data =newHashMap();
data.put("name","Zebe");
data.put("blog","www.zebe.me");
data.put("date", DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL).format(today));
String json = JSONObject.toJSONString(data);
System.out.println(json);
}
}
在IDEA右侧 Maven Projects 面板中,找到项目,运行 Lifecycle 下面的 package 命令,将其打包,得到生成的 jar包:cat-maven-simple-1.0-SNAPSHOT.jar。
02
—
使用jdeps分析JAR包的依赖
使用命令行进入 jar 包所在的目录(我本机的路径是:P:\personal\cat\java\cat-maven-simple\target\cat-maven-simple-1.0-SNAPSHOT.jar),然后执行一下命令:
如果提示命令未找到,请检查你的Java版本或者环境变量配置。如果你成功安装了Java8,那么在Java安装目录下的bin目录中,会有一个jdeps.exe文件,这个文件就是 jdeps 依赖分析工具。
如果命令成功执行,则会输出以下结果:
在上面输出的结果,提示“找不到”的那一行,说明该库无法在当前目录直接找到。
03
—
jdeps参数
jdeps可以指定很多参数运行,这里简单列举几个参数的用法,要查看全部详细的参数例子,请查看官方文档,地址:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jdeps.html。
-s (或-summary):仅打印依赖性摘要。
-v (或-verbose):打印所有类级别的依赖项。
-verbose:package:打印包级依赖项,不包括同一归档中的依赖项。
-verbose:class:打印类级依赖项,排除同一归档中的依赖项。
-cp (或-classpath) :指定在何处查找类文件。
-p (或-package) :指定在何处查找类文件。
-R (或-recursive):递归遍历所有依赖项。
04
—
jdeps小结
好了,jdeps工具的演示就到这里了,有了这个工具,可以在有些情况下快速的查看一个 JAR 包(或者某个单独的Java类)中依赖了哪些 JAR 包,对于快速分析问题有帮助。
jdeps官方演示地址:
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jdeps.html。
领取专属 10元无门槛券
私享最新 技术干货