5

我正在为 Tomcat 开发一个自定义会话管理器,并且我得到了一个警告,我必须将 jar(以及所有相关的 jar)放在 CATALINA_HOME/lib 目录中,否则我会得到一个 noclassdef found 异常,即使这些类位于 WEB-INF/lib 目录中。

有什么方法可以强制 tomcat 在加载会话管理器时查看 web 应用程序 lib 目录?将它放在 lib 目录中很容易出错(因为您必须记住在新系统上升级和/或安装时复制 jar)并使 jar 的开发更加困难。

4

1 回答 1

5

从 Tomcat 7.0.27 开始,META-INF/context.xml文件中的 <Manager> 元素由 commons-digester 处理,并且有效的 ClassLoader 设置为加载 ContextConfig 类的那个——它牢牢地驻留在 Tomcat 的服务器 ClassLoader 中,它位于外部可以访问 webapp 类的任何东西的 ClassLoading 链。

因此,如果不修改 Tomcat 源,就无法Manager从您的 webapp 中加载您的内容。考虑加入 Tomcat 用户的邮件列表以讨论此类功能。

编辑 2015-067-01

如果你想ClassLoader为你的 web 应用程序指定一个,你需要使用你的<Loader>元素:http <Context>: //tomcat.apache.org/tomcat-8.0-doc/config/loader.html

于 2012-06-07T16:14:50.253 回答