tomcat / lib或WEB-INF / lib中不需要的jar文件

时间:2009-09-17 05:19:55

标签: java tomcat jar

我目前正在开发一个大约十年前的应用程序。当我查看与应用程序关联的jar文件时,我可以看到许多不需要的jar和同一jar的许多不同版本。

在lib中使用不需要的jar有什么缺点。查找和删除它们的简便方法是什么?

4 个答案:

答案 0 :(得分:8)

如果类加载器决定从不同版本的jar文件加载类而不是您预期的类,则可能会出现问题。这些问题通常难以跟踪。服务器将以某种特定顺序查看jar(按字母顺序按文件名?)并使用它找到的第一个匹配的类/资源。可能没有保证首先查看最新版本的jar文件。

我不知道有哪些工具可以找出哪些罐子未被使用。由于反射,这在一般情况下可能是不可能的,但至少在理论上应该可以进行某种程度的自动检查。

如果您没有良好的单元测试,那么通过试验和错误删除未使用的jar文件是有问题的,我怀疑您在几十年前的应用程序中有。可能总会有一些罕见的错误情况,这取决于您刚删除的旧jar版本。

答案 1 :(得分:1)

我的建议是,如果您的应用程序正在运行,请保留现在的罐子。如果不是不可能找到哪个jar文件实际上由类加载器拾取将是非常麻烦的。 (当然不要部署新的应用程序)。

您可以使用JarAnalyzer找到jar文件包含的包。这将为您提供重复的概念,您可以开始删除旧版本的jar文件。但是,这个程序需要手工完成并通过反复试验来完成。此外,同一个包可能包含在两个名称不同且没有版本信息的罐子中。

如前所述,同一个罐子的不同版本可能会带来严重破坏。您无法知道实际使用哪个版本以及它将为此应用程序或其他应用程序带来的冲突。这就是为什么你永远不应该将Tomcat的共享文件夹用于应用程序jar。如果您处于共享文件夹中放置了许多jar文件的情况,请避免将此服务器用于新应用程序。

答案 2 :(得分:0)

在应用程序中使用不需要的jar文件,是否意味着每次都是在编译和构建过程中生成这些文件?如果是这样,那么它可能是您要清理的构建脚本。

如果您指的是实际的部署环境,那么必须非常小心地进行任何清理。为什么不尝试使用干净的tomcat安装和部署的最新版本的可执行文件在新的测试环境中重新开始?看看它是否运行良好,如果确实如此,那么额外的罐子可能确实是不必要的。

至于缺点,除了部署的文件大小之外,我没有看到任何其他内容。

答案 3 :(得分:0)

如何判断哪些罐子实际未使用?

我建议将其作为完全需要QA的更改。如果你删除一个“过时的”jar,你不知道从这组jar中选择的代码是否会影响错误的实现。