我使用的是Tomcat 8.0.27.0。我扩展了org.apache.catalina.webresources.StandardRoot
类,并在我的网络应用程序的context.xml
文件中引用它。
在我的自定义StandardRoot
中,我想将外部Jars添加到Web应用程序的类路径中。我已在覆盖的initInternal
方法中完成此操作:
super.initInternal();
JarResourceSet jarResourceSet = new JarResourceSet(this,
"/WEB-INF/classes",
"/path/to/first.jar",
"/") ;
super.addJarResources(jarResourceSet);
jarResourceSet = new JarResourceSet(this,
"/WEB-INF/classes",
"/path/to/second.jar",
"/");
super.addJarResources(jarResourceSet);
稍后,当Web应用程序启动时,我使用FastClasspathScanner
来搜索实现特定接口的类。 first.jar
和second.jar
都有一个实现接口的类,所以我希望能找到它们。
问题是只找到first.jar
中找到的类。如果我切换添加JarResourceSet
类的顺序,以便首先通过second.jar
添加super.addJarResources
,则找到second.jar
中的类,但不会找到first.jar
中的类1}}。
因此,只有通过addJarResources
添加的第一个jar成功添加到类路径中。
我还尝试使用addPreResources
和addClassResources
方法代替addJarResources
而不改变行为。
我也试过这样的createWebResourceSet
方法:
super.createWebResourceSet(ResourceSetType.PRE, "/WEB-INF/classes", "/path/to/first.jar", null, "/");
super.createWebResourceSet(ResourceSetType.PRE, "/WEB-INF/classes", "/path/to/second.jar", null, "/");
有类似的结果。
有趣的是,如果我使用RESOURCE_JAR
这样的类型:
super.createWebResourceSet(ResourceSetType.RESOURCE_JAR, "/WEB-INF/classes", "/path/to/first.jar", null, "/");
super.createWebResourceSet(ResourceSetType.RESOURCE_JAR, "/WEB-INF/classes", "/path/to/second.jar", null, "/");
然后我从FastClasspathScanner
获得了这样的错误:
io.github.lukehutch.fastclasspathscanner.MatchProcessorException: java.lang.ClassNotFoundException: the.class.i.am.LookingFor
所以它就像是找到了这个班级......但却找不到它?
我需要能够在类路径中添加任意数量的jar。我怎样才能做到这一点?我做错了什么?
谢谢!