我正在使用Tomcat 7开发Web应用程序.它使用放在webapps\MyApplication\WEB-INF\lib下的MyLib.jar.Tomcat已成功加载此库.问题在于MyLib.jar需要的库(比如A.jar和B.jar).
在创建MyLib.jar时,我添加了带有类路径的MANIFEST:otherLibs\A.jar otherLibs\B.jar(放在webapps\MyApplication\WEB-INF\lib\otherLibs下).
有趣的是,MyLib.jar可以从命令行运行而不会出现任何问题.
当我将A.jar和B.jar复制到\ lib目录时,这一切都适用于我.我只是不想把它们放在那里以保持Tomcat安装清洁.
也许我需要为MyApplication指定额外的类路径?也许全球为Tomcat?那么如何?请提供任何建议.
编辑:奇怪.我运行了一些额外的测试.我将MyLib.jar的类路径更改为"A.jar B.jar"(没有otherLibs目录),将A.jar和B.jar放在MyLib.jar旁边,现在它工作正常.它适用于我,但你能告诉我为什么它不使用"otherLibs"目录吗?
以下是您的应用程序正在进行的(尝试回答你能告诉我为什么它不能使用"otherLibs"目录吗?):
当您从命令行运行jar时,JVM使用标准的类加载机制,即Bootstrap类加载器 - >扩展类加载器 - >应用程序类加载器.此应用程序类加载器从CLASSPATH环境变量-classpath或-cp命令行选项,JAR中Class-Path的Manifest文件属性加载类.这就是它从命令行运行的原因.更多这里.
该服务器(如Tomcat)的类加载机制是不同的,从独立的应用程序.他们使用自定义类加载.这就是为什么只将您的所有罐子放在WEB-INF/lib简单的工作中,因为自定义类加载器意味着从WEB-INF/lib应用程序中的文件夹加载罐子.很明显,自定义类加载器不会考虑ManifestJAR 中的文件中的条目,因此忽略了不直接存在的所有jar WEB-INF/lib.当您复制jar时,它可以工作,WEB-INF/lib因为自定义类加载器无法找到它们.
| 归档时间: |
|
| 查看次数: |
9597 次 |
| 最近记录: |