Tomcat:在Web App Startup中将加载的类复制到WEB-INF / lib中?

时间:2014-12-17 13:29:24

标签: java tomcat classloader tomcat8

我的组织正在创建一个“基础”Java Web应用程序,可以通过将jar文件添加到Web应用程序的WEB-INF/lib目录来添加jar文件(带有自定义类)来进行自定义。我们的目标是我们的开发人员可以简单地创建自定义代码,打包为一个简单的jar文件,可以加载到这个“基础”Web应用程序中,这样开发人员就不必担心所有的Web应用程序管道,只需要实际自定义代码。

我们正在研究一些不同的部署模型,但有一个想法是将这些jar文件放在网络目录中的某个位置。当Java Web应用程序启动时,ServletContextListener将这些jar文件复制到Web应用程序的WEB-INF/lib目录中(Web应用程序最初部署为war文件)。

然后,另一个ServletContextListener使用Stripes'ResolverUtil类(JavaDoc here)来加载特定类型的所有类(在本例中,实现特定接口)位于已复制到WEB-INF/lib的jar文件中。

不幸的是,ResolverUtil无法找到这些类,即使它们位于那些复制的jar中。如果我重新启动Tomcat(这些jar文件仍在WEB-INF/lib中),则会按预期找到它们。

jar文件需要在WEB-INF/lib中,因为我们想要使用Servlet 3.0功能,从中可以从jar文件中提供JSP,并且为了工作,显然这些jar文件需要在{{{ 1}}。如果不是这种情况,我们只需在WEB-INF/lib的{​​{1}}属性中添加这些jar文件。

因此,在Web应用程序启动时,Tomcat似乎已经扫描了所有类定义的类路径,并且因为当Web应用程序启动时,这些jar文件不在shared.loader中,所以类将找不到。

有没有办法找到这些课程?我不需要Tomcat完全重装自己;我只需要那些新的jar文件和它们包含的类文件对类加载器可见。有没有办法告诉类加载器,“嘿,再次检查类路径以获取新的jar!”因为我只需要做一次,当网络应用程序启动时?

还有其他想法吗?

谢谢!

0 个答案:

没有答案