代码之家  ›  专栏  ›  技术社区  ›  Umesh

Tomcat/lib或WEB-INF/lib中不需要的JAR文件

  •  5
  • Umesh  · 技术社区  · 15 年前

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

    在图书馆里放不想要的罐子有什么缺点?找到和删除它们的简单方法是什么?

    4 回复  |  直到 15 年前
        1
  •  8
  •   Juha Syrjälä    15 年前

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

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

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

        2
  •  1
  •   kgiannakakis    15 年前

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

    您可以通过使用 JarAnalyzer . 这将给您一个重复的概念,您可以开始删除JAR文件的旧版本。然而,这一程序需要通过手工和试验和错误来完成。同样,同一个包可能包含在两个名称不同且没有版本信息的JAR中。

    如前所述,同一个罐子的不同版本可能会带来巨大的破坏。您不知道实际使用哪个版本,以及它会给这个或另一个应用程序带来什么冲突。这就是为什么你不应该使用Tomcat的应用程序jar共享文件夹的原因。如果您所处的环境中有许多JAR文件放在共享文件夹中,请避免将此服务器用于新的应用程序。

        3
  •  0
  •   Jeremy    15 年前

    通过应用程序中不需要的JAR文件,您的意思是这些文件每次都是作为编译和构建过程的一部分生成的吗?如果是这样,那么可能是您想要清理的构建脚本。

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

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

        4
  •  0
  •   Thorbjørn Ravn Andersen    15 年前

    你怎么能决定哪个罐子不是 事实上 用过了吗?

    我建议做一个全面的质量保证需要改变。如果删除一个“过时的”JAR,您不知道从JAR集合中选择的代码是否隐藏了一个错误的实现。