使用Jetty的setExtraClasspath时,预期的资源加载优先级是多少?

时间:2017-04-21 03:53:29

标签: java servlets jetty war

是否期望通过Jetty的WebAppContext.setExtraClasspath方法包含的.jar文件中的资源优先于.war中具有相同名称/路径的资源加载?

-

我正在将一些依赖项移出.war文件并通过WebAppContext的setExtraClasspath方法(http://www.eclipse.org/jetty/documentation/current/jetty-classloading.html#using-extra-classpath-method)包含它们

在这样做的时候,我遇到了一个问题,其中一个现在移出的.jar文件包含一个ehcache.xml文件,当Thread.currentThread().getContextClassLoader().getResourceAsStream(“ehcache.xml”)var text = "Ngo Kim Huynh <the.fallen.angel.9x@gmail.com>"; $("#divContent").append(text); 时,它似乎优先于.war中的文件。使用

现在我知道情况就是如此,我想如果我需要将文件重命名为独特的话,对我来说并不是很大的不便,但我想我想知道......

  • 我是否错误地加载了资源(如果是这样,我怎样才能优先使用.war?)

  • .war版本之前优先考虑的运气(当.jar被包装在.war中时)只是运气吗?

  • 使用setExtraClasspath这是我必须忍受的预期缺点吗?

  • 我是否遗漏了一些可以为我澄清的文件?

1 个答案:

答案 0 :(得分:1)

感谢Jan on the jetty-user's list ...

  

AFAIK我们不会对额外的类路径做任何特殊处理。命令   添加到作为webapp的URLClassLoader的路径   classloader是:

     
      
  • 额外的路径
  •   
  • WEB-INF /类
  •   
  • WEB-INF / lib中/ *。罐
  •   
     

webapp类加载器getResource(String)方法首先查找自身   在查看父级之前(为了符合servlet规范的反转   类加载要求),但是看起来都被委托给了   URLClassLoader,所以它是jvm实现的任何命令,其中   根据GrepCode   http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/sun/misc/URLClassPath.java#URLClassPath.0urls   看起来搜索顺序如上所述。

对我的情况感到难过,但是有道理。