是否可以检测哪些已弃用的类被主动使用?

时间:2014-09-29 08:40:38

标签: java jvm

我有一个相对复杂的java项目,有很多可能没有使用的类。

代码库的静态分析与某些类相关,但有些是动态加载的(网络服务,持久数据等)

是否有方法可以获取jvm中主动使用的已弃用类列表,因此我可以知道是否使用了这些类?

[我知道可能会有#34;卧铺课程"只使用很少,但这是我可以承担的风险]

5 个答案:

答案 0 :(得分:1)

您可以尝试使用-deprecation(或-Xlint:deprecation)进行编译,以查看已弃用的API的使用,如果您必须使用源代码(我猜您已经拥有它)

答案 1 :(得分:1)

JVM可以选择打印有关所有已使用类的信息。例如:

java -verbose:class ...

您仍然需要通过其他方式过滤掉已弃用的内容。

答案 2 :(得分:1)

我能想到以下几点:

形式为每个类添加静态初始值设定项

静态{

//在这里你可以获得创意:

//要么写一个文件,每个类打印其名称

//或者System.err输出类名,然后稍后获取整个输出。

}

如果你懒得手动添加这段代码,你可以编写简单的程序,将这个初始化程序附加到以.java结尾的所有文件。

这是获取正在使用的所有类的列表的简单方法(我认为)。 祝你好运!

答案 3 :(得分:1)

过去我曾使用过像UCDetector这样的工具。但这需要人工评估,这对大型项目来说可能是痛苦的。您可以进行如下文本分析:

列出已弃用的活动用法

对于静态代码分析,列出已使用IDE已提供源的已弃用方法。

  1. 在Eclipse中,转到窗口 - >偏好 - > Java - >编译器 - >错误/警告 - >弃用和限制API :将级别设置为WARNING并检查其他项目。
  2. 在问题视图中,点击标签旁边的向下按钮 - > 分组依据 - > Java问题类型
  3. 您将能够看到Deprecation使用列表组合在一起,将内容复制为文本,您可以使用它来进一步准备脚本/ excel进行分析
  4. 使用简单的文字编辑器查找并替换" from the type"和" is deprecated"使用制表符
  5. 将内容复制到电子表格中。您将获得一个包含已弃用方法但具有活动用途的类列表。
  6. 列出非活动用法弃用方法

    1. 使用上面的类似方法列出类和方法名称(对于方法名称替换文字" The method"和" from the type" with制表符)。
    2. 此列表减去上一个列表是非活动方法列表。
    3. 列出动态弃用方法

      对于使用反射等的动态代码,没有单一的子弹方法。您可以使用方法名称过滤基本内容。

      1. 使用上述类似方法列出方法名称(将文字" The method"和#34; from the type"替换为制表符。
      2. 对于唯一的方法名称集,循环使用grep脚本。即使对于小型项目,这种类型的搜索也可能很慢。但万一你想要投入时间。

答案 4 :(得分:0)

全部删除它们并尝试运行您的应用程序。每次为其中一个获得ClassNotFoundException时,请将其写下来并重新添加课程。冲洗并重复。