我有一个在Tomcat 5.0中运行的遗留Web应用程序.
这个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中添加的类无法在1.0中找到,等等.
在Eclipse中,简单的解决方案是右键单击您的Project,单击Properties > Java Built Path > Order and Export并将Foo-2.0.jar移到Bar-2.0.jar之上,以便首先解析它.
如何在Tomcat的WEB-INF/lib中为jar实现这种类型的路径排序?
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/lib
于Tomcat/common
或Tomcat/shared
.
JAR未按名称的字母顺序加载.至少,没有规范说明这一点.重命名它们以更改按字母顺序排列的文件名顺序是没有意义的.