我的组织正在创建一个“基础”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!”因为我只需要做一次,当网络应用程序启动时?
还有其他想法吗?
谢谢!