我有一个在 Tomcat 5.0 中运行的遗留 Web 应用程序。
这个网络应用程序在 WEB-INF/lib 中有两个 jar,比方说 Foo-2.0.jar 和 Bar-2.0.jar . Bar-2.0.jar 实际上包含一个 Foo-1.0.jar 在里面。 Bar也是一个死项目,没有升级,没有源码,但对应用还是很重要的。
此应用程序的最新版本需要 Foo-2.0.jar 来提供一些其他内容。在类路径中同时拥有 Foo-1.0.jar 和 Foo-2.0.jar 会产生冲突,特别是 ClassDefNotFound 类型的错误,其中2.0后来加入的class在1.0找不到等等
在 Eclipse 中,简单的解决方案是右键单击您的项目,单击Properties> Java Built Path> Order 和导出 并将Foo-2.0.jar 移到Bar-2.0.jar 之上,以便首先解决。
如何在 Tomcat 的 WEB-INF/lib 中完成这种类型的 jar 类路径排序?
最佳答案
Tomcat 5's classloading precedence for webapps大致如下:首先是bootstrap/system(JRE/lib
,然后是Tomcat的内部类),然后是webapp libraries(首先是WEB-INF/classes
,然后是WEB-INF/lib
),然后是公共(public)库(首先是 Tomcat/common
,然后是 Tomcat/lib
),最后是 webapp 共享库(Tomcat/共享
)。
因此,要在 Bar-2.0.jar
之前加载 Foo-2.0.jar
,最好的办法是移动 Bar-2.0.jar
从 WEB-INF/lib
到 Tomcat/common
或 Tomcat/shared
。
JAR 未按其名称的字母顺序加载。至少,没有规范说明这一点。重命名它们以更改字母文件名顺序是没有意义的。
关于java - 控制 Tomcat 5 上 WEB-INF/lib 中 jar 的类路径排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2021227/