Tomcat 版本:5.0.28 JDK:1.5.0.14
问题:
我同时使用 hibernate 和 struts 我们没有使用这些库的最新和最好的版本 所以 - 两者都需要不同版本的 apache-commons 库。
我想到的解决方案:
使用 list 文件并为每个文件指定不同版本的 apache-commons
我的网络应用部署为 网络应用程序\我的应用程序
库是 webapps\myapp\WEB-INF\lib
我修改了hibernate3.jar中的Manifest.mf如下
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver Created-By: 1.5.0_15-b04 (Sun> Microsystems Inc.) Class-Path: hibernatelib/slf4j-api-1.5.2.jar
并将slf4j-api-1.5.2.jar放入 webapps\myapp\WEB-INF\lib\hibernatelib
现在我希望 slf4j-api-1.5.2.jar 会与休眠一起自动加载 但它不起作用... Tomcat 无法找到如上.MF 中指定的jar 文件
问题:
- 我做错了什么吗?还是 Tomcat?
- 这个问题还有其他解决方案吗?
我已经尝试\检查了以下内容
- 检查文件末尾的换行符
- 如果我将 slf4j-api-1.5.2.jar 放在主 lib 文件夹中 - 错误消失 - 所以我知道它无法找到这个特定的 jar 文件
- 尝试了 list 文件中的相对、绝对路径
最佳答案
list 中唯一使用 Class-Path
属性的地方是当包含 list 的 jar
被称为可执行 jar 时使用 (" java -jar theFile.jar
").
一些 servlet 容器似乎支持它,但根据 to this mailing list post (抱歉,没能这么快找到更权威的东西)它也没有在规范中指定。
据我了解,Web 应用程序通常使用单个类加载器加载它们的类。 “正确”解决该依赖性问题至少需要 2 个不同的类加载器。
hack-ish 解决方案可能是使用 jarjar或类似的工具将不同的库及其各自的依赖项打包在一起。
因此,您将生成一个包含 Hibernate 及其 apache-commons 库的 jar
和另一个包含 struts 及其 apache-commons 库的 jar
。 apache-commons 库的每个副本将移动到不同的包(可能是 hibernate.org.apache.*
和 struts.org.apache.*
)以解决问题具有不同的类版本。
关于Tomcat 无法从 list 文件中选择类路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/731729/