jdeps
是一个 java 类依赖分析工具,允许开发者深入分析 java 应用程序的依赖情况,包括类、包、模块和 jdk 内部 api 的使用。下面详细介绍 jdeps
的常用命令和输出解释。
1. 基本依赖分析
jdeps path/to/yourapp.jar
这个命令会分析指定 jar 文件中的依赖关系,并输出每个类的依赖情况。
输出示例:
yourapp.jar -> java.base com.example.myclass -> java.util.list com.example.myclass -> java.io.file
这表明 yourapp.jar
依赖于 java.base
模块,且 myclass
依赖于 java.util.list
和 java.io.file
。
2. 包依赖分析(-s 或 --summary)
jdeps -s path/to/yourapp.jar
该选项会简化输出,仅显示包与包之间的依赖,而不列出每个类的详细依赖。
输出示例:
yourapp.jar -> java.base com.example -> java.util com.example -> java.io
这表示 com.example
包依赖于 java.util
和 java.io
包。
3. 模块依赖分析
在 java 9 及以上版本,java 引入了模块系统。通过 jdeps
可以分析模块之间的依赖。
jdeps --module-path path/to/modules --add-modules your.module.name path/to/yourapp.jar
输出示例:
yourapp.jar -> java.base my.module -> java.logging my.module -> java.sql
这表示 my.module
依赖于 java.logging
和 java.sql
模块。
4. 查找 jdk 内部 api 的使用情况(-jdkinternals)
如果你想检查项目中是否使用了不安全的 jdk 内部 api,可以使用 -jdkinternals
选项。
jdeps -jdkinternals path/to/yourapp.jar
输出示例:
myapp.jar -> java.base com.example.myclass -> sun.misc.unsafe warning: com.example.myclass uses jdk internal api (sun.misc.unsafe)
这意味着 myclass
使用了 sun.misc.unsafe
,这是一个 jdk 内部 api,应该尽量避免使用。
5. 显示类依赖(-v 或 --verbose)
使用 -v
选项可以显示更详细的依赖信息。它有三个详细级别:
-verbose:class
:显示类的依赖。-verbose:package
:显示包的依赖。-verbose:module
:显示模块的依赖。
jdeps -v:class path/to/yourapp.jar
输出示例:
yourapp.jar -> java.base com.example.myclass -> java.util.arraylist com.example.myclass -> java.io.file com.example.myclass -> java.lang.string
这列出了每个类的具体依赖关系。
6. 限制分析到指定包或类(-p 或 --package)
你可以使用 -p
选项仅分析指定包的依赖。
jdeps -p com.example path/to/yourapp.jar
输出说明:
- 只显示
com.example
包的依赖关系。
7. 生成依赖图文件(-dotoutput)
可以使用 -dotoutput
选项生成 .dot
文件,使用这些文件可以通过图形工具(如 graphviz)生成依赖关系图。
jdeps -dotoutput path/to/output/ path/to/yourapp.jar
输出说明:
- 在指定的输出目录下生成
.dot
文件,用图形工具可以将依赖可视化。
jdeprscan 简介
jdeprscan
是另一个用于扫描已弃用 api 的工具,它可以帮助开发者检查代码是否依赖于即将在未来 jdk 版本中移除的 api。
常见用法
扫描指定 jdk 版本的弃用 api(–release)
--release
选项允许你扫描是否依赖于指定 jdk 版本中已弃用或将要删除的 api。
jdeprscan --release 17 path/to/jars-directory
这将扫描目录下的所有 jar 文件,查找 jdk 17 中的已弃用或删除的 api。
输出示例:
warning: com.example.myclass uses deprecated method java.util.date.getyear()
表示 myclass
使用了已在 jdk 17 中弃用的 getyear()
方法。
显示所有可扫描版本的 api
使用 jdeprscan --list
可以查看可以指定的 jdk 版本。
jdeprscan --list
输出示例:
supported releases: 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
扫描指定类文件或 jar 文件的弃用 api
如果你想扫描特定的类或 jar 文件:
jdeprscan path/to/yourapp.jar
输出示例:
warning: com.example.myclass uses deprecated method java.util.date.getyear()
jdeps 和 jdeprscan 常见问题解答
问题 1:运行 jdeps 时没有输出,意味着什么?
如果运行 jdeps
命令后没有任何输出,可能有以下几种情况:
- 无依赖:所分析的类或 jar 文件中没有外部依赖。
- 类文件格式不兼容:可能分析的
.jar
或.class
文件不兼容(例如,jdk 版本不一致)。
问题 2:为什么 jdeprscan --release 17 没有输出?
如果运行 jdeprscan --release 17 path/to/jar
没有输出,说明:
- 没有使用弃用的 api:项目中没有使用 jdk 17 已弃用的 api。
- 路径不正确:确保你提供了正确的路径,并且该路径下有需要扫描的 jar 文件或类文件。
总结:jdeps 和 jdeprscan 的全面使用
jdeps
是分析 java 类和模块依赖的工具,常用来迁移和检查内部 api 的使用。- 常用选项包括
-v
(显示详细依赖)、-s
(显示包依赖)、-jdkinternals
(检查内部 api)。
- 常用选项包括
jdeprscan
用于扫描代码中使用的弃用 api,常用--release
来指定扫描的目标 jdk 版本。jdeprscan --release 17
可以检查代码是否使用了在 jdk 17 中被弃用的 api。
掌握这些工具有助于你有效迁移代码到较新的 jdk 版本,并避免使用将来可能被移除的 api。
到此这篇关于java中jdeps命令使用的文章就介绍到这了,更多相关jdeps 使用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论