在我们的应用程序中,通过开发大量JAR文件的过程已被收集。如何过滤掉那些应用程序不再使用的内容?在一些简单的方法?
答案 0 :(得分:3)
如果你确定你可以运用你的应用程序以便它使用它的所有罐子,你可以创建一个简单的perl脚本:
while (<>) {
$l{$1}++ if m/\s+from\s+(.+\.jar)/;
}
for $l (keys(%l)) {
print "$l\n";
}
(让它命名为list_jars.pl)并将其输入为详细运行的输出:
java -verbose -jar YOUR_APP.jar | perl list_jars.pl
应列出所有已加载类的源。
答案 1 :(得分:1)
如果你使用maven,那就有一个妙处:mvn依赖:分析 如果没有,我不知道任何简单的方法。困难的方法是涉及对项目的所有编译类进行字节码分析以检查导入......
答案 2 :(得分:1)
我使用过stan。它是java的结构分析器,它给了我非常好的结果。
您可以直观地看到使用哪个罐子,哪个罐子不使用。
答案 3 :(得分:0)
编写一个脚本,从构建路径中逐个删除它们,编译项目并检查构建错误。该脚本将汇集未使用的jar列表。应该很容易用bash / python写。
此解决方案无法根据反射跟踪运行时依赖关系(请参阅下面的评论)。
答案 4 :(得分:0)
也许你可以编写自己的ClassLoader,继承自java.lang.ClassLoader,记录加载类的路径?这仍然无法解决确保在所有可能的代码路径中加载的所有类的完全覆盖问题,但