我正在为 Tomcat 开发一个自定义会话管理器,并且我得到了一个警告,我必须将 jar(以及所有相关的 jar)放在 CATALINA_HOME/lib 目录中,否则我会得到一个 noclassdef found 异常,即使这些类位于 WEB-INF/lib 目录中。
有什么方法可以强制 tomcat 在加载会话管理器时查看 web 应用程序 lib 目录?将它放在 lib 目录中很容易出错(因为您必须记住在新系统上升级和/或安装时复制 jar)并使 jar 的开发更加困难。
我正在为 Tomcat 开发一个自定义会话管理器,并且我得到了一个警告,我必须将 jar(以及所有相关的 jar)放在 CATALINA_HOME/lib 目录中,否则我会得到一个 noclassdef found 异常,即使这些类位于 WEB-INF/lib 目录中。
有什么方法可以强制 tomcat 在加载会话管理器时查看 web 应用程序 lib 目录?将它放在 lib 目录中很容易出错(因为您必须记住在新系统上升级和/或安装时复制 jar)并使 jar 的开发更加困难。
从 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