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

Java tomcat/lib或WEB-INF/lib中不需要的jar文件,java,tomcat,jar,Java,Tomcat,Jar,我目前正在开发一个大约有十年历史的应用程序。当我查看与应用程序相关联的jar文件时,我可以看到许多不需要的jar以及同一jar的许多不同版本 lib中有不需要的jar的缺点是什么。查找和删除它们的简单方法是什么?如果类加载器决定从不同版本的jar文件加载类,则可能会遇到问题。这类问题通常很难追踪。服务器将按特定顺序(按文件名的字母顺序?)查找JAR,并使用它找到的第一个匹配类/资源。可能无法保证首先查看jar文件的最新版本 我不知道有什么工具可以找出哪些罐子没用。在一般情况下,由于反射,这可能是

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


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

如果类加载器决定从不同版本的jar文件加载类,则可能会遇到问题。这类问题通常很难追踪。服务器将按特定顺序(按文件名的字母顺序?)查找JAR,并使用它找到的第一个匹配类/资源。可能无法保证首先查看jar文件的最新版本

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


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

对于应用程序中不需要的jar文件,您的意思是每次编译和构建过程中都会生成这些文件吗?如果是这样,那么您可能需要清理构建脚本

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


至于缺点,除了部署的文件大小之外,我看不到任何缺点。

您如何确定哪些JAR没有被实际使用


我建议对此进行全面修改。如果删除一个“过时”的jar,您不知道从jar集合中选择的代码是否会隐藏一个错误的实现。

我的建议是,如果您的应用程序正在工作,请保持jar现在的状态。如果不是不可能的话,找出类加载器实际拾取了哪些jar文件将是非常麻烦的。(当然,不要部署新的应用程序)

您可以通过使用找到jar文件包含的包。这将使您了解重复的内容,您可以开始删除较旧版本的jar文件。然而,这一程序需要通过手工和反复试验来完成。同样,同一个包可能包含在两个具有不同名称且没有版本控制信息的JAR中


如前所述,拥有同一个罐子的不同版本可能会带来灾难。您不知道实际将使用哪个版本,以及它将给这个或另一个应用程序带来什么冲突。这就是为什么永远不要使用Tomcat的共享文件夹来存储应用程序JAR。如果您的共享文件夹中有许多jar文件,请避免将此服务器用于新的应用程序。

我认为您的意思是“cons”而不是“cron”。抱歉,尚未设置编辑权限。已更改!祝你早日得到它!我所说的不需要的jar是jtds1.2.jar,而jtds1.2.2.jar是指没有使用1.2的地方。在过去的六个月里,我们一直在使用jtds连接。但它仍然包含mssql.jar等。。在那之前我们已经习惯了。编译/构建过程中没有生成任何文件。目前,我只有一个应用程序在tomcat下运行。但在tomcat共享路径中包含JAR的原因是,有些JAR tomcat在驻留在应用程序库中时不会使用。例如:jtds.jar,mysql V5.4jar。若您将这些JAR放在应用程序库中并尝试连接到数据库,它将抛出异常。(它对我来说从来都不起作用。对于一个解决方案,我将它复制到tomcat lib,然后它开始工作。)如果您使用JNDI资源来配置数据源,那么jdbc连接器必须位于共享文件夹中,以便在应用程序启动之前,jar文件存在。这是一个例外。除非绝对必要,否则不要将JAR放在共享文件夹中。