Tomcat StandardRoot:仅添加一个Jar文件

时间:2016-12-09 17:02:17

标签: java tomcat tomcat8

我使用的是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.jarsecond.jar都有一个实现接口的类,所以我希望能找到它们。

问题是只找到first.jar中找到的类。如果我切换添加JarResourceSet类的顺序,以便首先通过second.jar添加super.addJarResources,则找到second.jar中的类,但不会找到first.jar中的类1}}。

因此,只有通过addJarResources添加的第一个jar成功添加到类路径中。

我还尝试使用addPreResourcesaddClassResources方法代替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。我怎样才能做到这一点?我做错了什么?

谢谢!

0 个答案:

没有答案