Java8使用jdeps——Java类依赖性分析器

“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。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180727G217A800?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券