当前教程
Jdeprscan - 已弃用 API 元素扫描器
这是系列的最后一篇!

系列中的上一篇: Jdeps - 分析您的 Java 类依赖项

Jdeprscan - 已弃用 API 元素扫描器

 

介绍 jdeprscan

jdeprscan - 静态分析工具,用于扫描 jar 文件(或其他类文件集合)以查找已弃用 API 元素的使用情况

 

概要

jdeprscan [options] {dir|jar|class}

options 请参见下面 jdeprscan 的选项

dir|jar|class jdeprscan 命令扫描每个参数以查找已弃用 API 的使用情况。参数可以是

  • dir:目录

  • jar:JAR 文件

  • class:类名或类文件

类名应使用点 . 作为分隔符。例如

java.lang.Thread

对于嵌套类,应使用美元符号 $ 分隔符。例如

java.lang.Thread$State

也可以命名类文件。例如

build/classes/java/lang/Thread$State.class

 

描述

jdeprscan 工具是 JDK 提供的静态分析工具,用于扫描 JAR 文件或其他类文件集合以查找已弃用 API 元素的使用情况。jdeprscan 工具仅识别 Java SE 定义的已弃用 API。第三方库定义的已弃用 API 不会被报告。

要扫描 JAR 文件或一组类文件,您必须首先确保扫描的类所依赖的所有类都存在于类路径中。使用 --class-path 选项设置类路径,如 jdeprscan 命令的选项中所述。通常,您会使用与调用应用程序时相同的类路径。

如果 jdeprscan 找不到所有依赖类,它将为每个缺少的类生成一条错误消息。这些错误消息通常采用以下形式

error: cannot find class ...  

 

选项

提供以下选项

--class-path path 提供一个搜索路径来解析依赖类。

path 可以是一个搜索路径,该路径由一个或多个用系统特定路径分隔符分隔的目录组成。例如

Linux 和 macOS

--class-path /some/directory:/another/different/dir 

Windows

--class-path \some\directory;\another\different\dir

--for-removal 将扫描或列出限制为已弃用以供移除的 API。不能与版本值为 6、7 或 8 一起使用。

--full-version 打印出工具的完整版本字符串。

--help—h 打印出完整的帮助消息。

--list—l 打印已弃用 API 的集合。不会进行扫描,因此不应提供任何目录、jar 或类参数。

--release 15|16 指定提供用于扫描的已弃用 API 集的 Java SE 版本。

--verbose—v 在处理过程中启用其他消息输出。

--version 打印出工具的缩写版本字符串。

 

示例

此库的 JAR 文件将被命名为类似于 commons-math3-3.6.1.jar 的名称。要扫描此 JAR 文件以查找已弃用 API 的使用情况,请运行以下命令

jdeprscan commons-math3-3.6.1.jar 

此命令会产生几行输出。例如,一行输出可能是

class org/apache/commons/math3/util/MathUtils uses deprecated method java/lang/Double::<init>(D)V

它使用的已弃用 API 是 java.lang.Double 类上的方法。

已弃用方法的名称是 <init>,这是一个特殊名称,表示该方法实际上是一个构造函数。另一个特殊名称是 <clinit>,它表示一个类静态初始化器。

其他方法仅按其方法名称列出。在方法名称之后是参数列表和返回类型

(D)V

这表明它只接受一个双精度值(一个基本类型)并返回 void。参数和返回类型可能会变得难以理解。例如,另一行输出可能是

class org/apache/commons/math3/util/Precision uses deprecated method java/math/BigDecimal::setScale(II)Ljava/math/BigDecimal;

在这行输出中,已弃用方法位于 java.math.BigDecimal 类上,该方法是 setScale()。在这种情况下,II 表示它接受两个 int 参数。括号后的 Ljava/math/BigDecimal; 表示它返回对 java.math.BigDecimal 的引用。

您可以相对于前三个 JDK 版本使用 jdeprscan。例如,如果您正在运行 JDK 16,那么您可以针对所有早期的 JDK 进行检查。

例如,请查看此代码片段

public class Deprecations {    
   SecurityManager sm = new RMISecurityManager();    // deprecated in 8    
   Boolean b2 = new Boolean(true);          // deprecated in 9        
}

在 JDK 9 上运行 jdeprscan

jdeprscan --class-path classes example.Deprecations

class example/Deprecations uses type java/rmi/RMISecurityManager deprecated    
class example/Deprecations uses method in type java/rmi/RMISecurityManager deprecated
class example/Deprecations uses method java/lang/Boolean <init> (Z)V deprecated

上次更新: 2021 年 9 月 14 日


当前教程
Jdeprscan - 已弃用 API 元素扫描器
这是系列的最后一篇!

系列中的上一篇: Jdeps - 分析您的 Java 类依赖项