在Tomcat 5上控制WEB-INF/lib中jar的类路径排序?

Rob*_*ell 8 java tomcat jar classpath

我有一个在Tomcat 5.0中运行的遗留Web应用程序.

这个Web应用程序在WEB-INF/lib中有两个jar,比如说Foo-2.0.jarBar-2.0.jar.Bar-2.0.jar实际上包含了一个Foo-1.0.jar.Bar也是一个死的项目,意味着没有升级,没有来源,但对应用程序仍然很重要.

该应用程序的最新版本需要Foo-2.0.jar来处理其他一些内容.在类路径中同时具有Foo-1.0.jarFoo-2.0.jar会产生冲突,特别是ClassDefNotFound类型的错误,其中稍后在2.0中添加的类无法在1.0中找到,等等.

在Eclipse中,简单的解决方案是右键单击您的Project,单击Properties > Java Built Path > Order and Export并将Foo-2.0.jar移到Bar-2.0.jar之上,以便首先解析它.

如何在Tomcat的WEB-INF/lib中为jar实现这种类型的路径排序?

Bal*_*usC 33

Tomcat 5的 webapps 类加载优先级大致如下:首先是bootstrap/system(JRE/lib然后是Tomcat的内部类),然后是webapp库(首先是WEB-INF/classes,然后是WEB-INF/lib),然后是公共库(首先是Tomcat/common,然后是Tomcat/lib),最后是webapp-shared库(Tomcat/shared).

因此得到Foo-2.0.jar加载之前 Bar-2.0.jar,最好你可以做的是将Bar-2.0.jar来自WEB-INF/libTomcat/commonTomcat/shared.

JAR未按名称的字母顺序加载.至少,没有规范说明这一点.重命名它们以更改按字母顺序排列的文件名顺序是没有意义的.


Geo*_*uba 3

将 Foo-1.0.jar 放入 $CATALINE_HOME/common/endorsed (或在 Foo-2.0.jar 之后加载的任何其他位置)。