Java Tomcat can';t访问WEB-INF/lib中我的库引用的jar库
我正在使用Tomcat7开发web应用程序。它使用放置在下面的MyLib.jar webapps\MyApplication\WEB-INF\lib。Tomcat已成功加载此库。问题在于MyLib.jar所需的库(比如A.jar和B.jar) 在创建MyLib.jar时,我添加了带有类路径的清单:otherLibs\A.jar otherLibs\B.jar(位于webapps\MyApplication\WEB-INF\lib\otherLibs下) 有趣的是,MyLib.jar可以从命令行运行,没有任何问题 当我将A.jar和B.jar复制到\lib目录时,这一切都对我有效。我只是不想把它们放在那里以保持Tomcat安装的清洁 也许我需要为我的应用程序指定额外的类路径?也许是为了Tomcat?那怎么办?请提供任何建议 编辑:Java Tomcat can';t访问WEB-INF/lib中我的库引用的jar库,java,tomcat,Java,Tomcat,我正在使用Tomcat7开发web应用程序。它使用放置在下面的MyLib.jar webapps\MyApplication\WEB-INF\lib。Tomcat已成功加载此库。问题在于MyLib.jar所需的库(比如A.jar和B.jar) 在创建MyLib.jar时,我添加了带有类路径的清单:otherLibs\A.jar otherLibs\B.jar(位于webapps\MyApplication\WEB-INF\lib\otherLibs下) 有趣的是,MyLib.jar可以从命令行运
奇怪。我运行了一些附加测试。我将MyLib.jar的类路径更改为“A.jar B.jar”(不带otherLibs目录),将A.jar和B.jar放在MyLib.jar旁边,现在它可以正常工作了。它对我有效,但是你能告诉我为什么它不能与“otherLibs”目录一起工作吗?下面是你的应用程序的情况(尝试回答你能告诉我为什么它不能与“otherLibs”目录一起工作吗?)
清单
文件的属性的环境变量、-CLASSPATH
或-cp
命令行选项、类路径
加载类。这就是它在命令行中工作的原因
WEB-INF/lib
中的原因,因为自定义类加载器意味着从应用程序的WEB-INF/lib
文件夹中加载JAR。很明显,自定义类加载器不考虑JAR中清单
文件中的条目,因此忽略所有不是直接在WEB-INF/lib中的JAR。当您在WEB-INF/lib
中复制JAR时,它会起作用,因为自定义类装入器无法找到它们
为什么不将它们放在
\WEB-INF\lib
下,而不是创建另一个子文件夹?我刚刚做了,更改了类路径,它工作正常(请参见问题中的编辑)。出于好奇,为什么它不能与子文件夹一起工作?当lib位于WEB-INF\lib
下时,您不需要使用class path
引用它们。正如我在JRE规范中所知道的,libs只在这个文件夹下搜索,而不检查类path。MyLib.jar被添加到内置到.war文件中的MyApplication项目中。我没有在这个项目中添加A.jar和B.jar,非常感谢。我不理解Tomcat使用的类加载机制。现在很清楚了。