The jdeprscan Command

名称

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

概要

jdeprscan [选项] {目录|jar|}

选项
参见jdeprscan命令的选项
目录|jar|

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

  • 目录: 目录

  • jar: JAR文件

  • : 类名或类文件

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

java.lang.Thread

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

java.lang.Thread$State

也可以命名类文件。例如:

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

描述

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

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

如果jdeprscan找不到所有依赖类,则会为每个缺失的类生成错误消息。这些错误消息通常的形式如下:

error: cannot find class ...

如果出现这些错误,则必须调整类路径,以便包含所有依赖类。

jdeprscan命令的选项

以下选项可用:

--class-path 路径

为解析依赖类提供搜索路径。

路径可以是一个或多个由系统特定路径分隔符分隔的目录搜索路径。例如:

  • Linux和macOS:

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

注意:

在Windows上,使用分号(;)作为分隔符,而不是冒号(:)。

  • Windows:

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

--for-removal
限制扫描或列出将被移除的API。不能与版本值为6、7或8一起使用。
--full-version
打印工具的完整版本字符串。
--help-h
打印完整的帮助消息。
--list-l
列出已弃用的API集合。不进行扫描,因此不应提供目录、jar或类参数。
--release 6|7|8|9
指定提供用于扫描的已弃用API集的Java SE版本。
--verbose-v
在处理过程中启用额外的消息输出。
--version
打印工具的简略版本字符串。

jdeprscan输出示例

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

注意:

java.lang.Double类的一个方法。

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

(D)V

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的引用。

jdeprscan分析可以是特定版本的

jdeprscan。例如,如果您正在运行JDK 9,则可以针对JDK 8、7和6进行检查。

public class Deprecations {
   SecurityManager sm = new RMISecurityManager();    // 在8中已弃用
   Boolean b2 = new Boolean(true);          // 在9中已弃用
}
jdeprscan,则会看到:

$ jdeprscan --class-path classes --release 7 example.Deprecations
(无输出)
jdeprscan

$ jdeprscan --class-path classes --release 8 example.Deprecations
class example/Deprecations uses type java/rmi/RMISecurityManager deprecated
class example/Deprecations uses method in type java/rmi/RMISecurityManager deprecated
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