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

标签 java tomcat jar classpath

我有一个在 Tomcat 5.0 中运行的遗留 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后来加入的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.jarWEB-INF/libTomcat/commonTomcat/shared

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

关于java - 控制 Tomcat 5 上 WEB-INF/lib 中 jar 的类路径排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2021227/

相关文章:

java - AdMob libGDX 与 Google Play 服务

java - 有人可以解释.wav(WAVE)文件头吗?

java - 用于删除 Java 应用程序当前文本字段中的条目的 SQL 命令

eclipse - 启动 apache 服务器时出现 HTTP 404 错误

java - 将外部 JAR 添加到 Eclipse

java - 有没有办法可以在执行时覆盖 JRE 中的文件?也就是说,不编辑JRE?

java - 我收到 java.lang.ArithmeticException 错误

java - SWT工具栏问题

jakarta-ee - 在 Tomcat 6 中添加 java_opts 参数

java - 对本地存储库(gradle)中的依赖关系感到困惑