名称
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