Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过代码覆盖率确定未使用的JAR?_Java_Jar_Code Coverage - Fatal编程技术网

Java 通过代码覆盖率确定未使用的JAR?

Java 通过代码覆盖率确定未使用的JAR?,java,jar,code-coverage,Java,Jar,Code Coverage,我有一个有一百万罐(嗯,很多)的项目。它们是maven提供给我的,我只使用了一小部分功能。看在清洁的份上,我想知道我可以不用罐子 我的第一个想法是使用代码覆盖工具运行程序,然后找到所涉及的类 以前有人这样做过吗?还是有更聪明的技巧可以实现同样的效果?您可以使用-verbose:classVM选项运行项目。这将为加载它们的所有类打印。使用一些智能解析app/grep/regexp将允许您将jar名称过滤到一组唯一的条目中,并告诉您使用了哪些条目 我认为这会更容易,因为它会自动告诉您是否使用了一个类

我有一个有一百万罐(嗯,很多)的项目。它们是maven提供给我的,我只使用了一小部分功能。看在清洁的份上,我想知道我可以不用罐子

我的第一个想法是使用代码覆盖工具运行程序,然后找到所涉及的类


以前有人这样做过吗?还是有更聪明的技巧可以实现同样的效果?

您可以使用
-verbose:class
VM选项运行项目。这将为加载它们的所有类打印。使用一些智能解析app/grep/regexp将允许您将jar名称过滤到一组唯一的条目中,并告诉您使用了哪些条目

我认为这会更容易,因为它会自动告诉您是否使用了一个类,如果是,在哪个jar中使用

当然,这和代码覆盖率的问题是,您可能会删除一个仅在某些特殊情况下使用的jar,但是如果您删除了一个或两个太多的jar,编译器会抱怨,这会让您(通常不会太复杂)找到类所在的jar

使用linux时可能的建议:

java-verbose:class | grep“\[Loaded”| grep-o“from.*\]”| cut-c6-| sort | uniq


如果您不使用linux,请保存到一个文件中,获取一台linux机器并在linux上运行(或者使用一些东西在windows上运行bash命令)

考虑使用已经存在的工具,如或

与所有静态分析工具一样,使用反射或DI框架可以摆脱这种情况;我已经求助于自定义工具,使用这个和其他输入来解决问题,尽管它仍然是静态的


对于完整的运行时使用信息,您可以使用Thirler的解决方案,尽管它是否完整可能取决于遵循的代码路径。

您可以使用
Maven Dependency Plugin
分析依赖关系树。它还将建议您下载/添加到项目中的依赖项,因为它们依赖于任何其他JAR


运行一个
mvn dependency:tree
,查看是否使用了一些不需要的jar。

从类路径中逐个删除jar,然后重新添加生成时删除的最后一个jarbreaks@ratchetfreak-坏主意,除非构建包含完整的集成测试,否则不会检测到间接的运行时依赖关系。@ratchet freak-这可能有效,但这是我上次恢复时使用的蛮力。这行不通,因为我需要的是动态行为,而不是静态分析。谢谢,这可能是最简单的方法。我想知道,可能会有更多的人有这个问题,如果有人已经有一些代码来做这件事。。这是一个很好的练习,但是为什么要重新发明轮子呢?@RobAu为linux添加了一个例子。这并不理想,但确实有效。