如何通过配置在Jetty中设置自定义WebAppClassLoader?

时间:2010-09-14 19:03:38

标签: java jetty classloader maven-jetty-plugin

我正在尝试使用自定义子类WebAppClassLoader配置Jetty(6.x)WebAppContext。在代码(Scala)中,它就是这样:

  val context = new WebAppContext()
  val cwacl = new CustomWebAppClassLoader(context)
  context.setClassLoader(cwacl)
  ...

嵌入Jetty时工作正常。但是,在生产中,我只是将一个war文件部署到一个独立的jetty实例,因此没有机会在这样的代码中配置。

我无法弄清楚如何通过Jetty的配置文件做同样的事情。任何帮助表示赞赏。

奖励:您如何配置maven-jetty-plugin以使用CustomWebAppClassLoader:)

2 个答案:

答案 0 :(得分:1)

您可以使用上下文配置文件。 contexts/目录中有一些示例。

这将是以下几点:

<Configure id="mycontext1" class="org.mortbay.jetty.webapp.WebAppContext">
    <Set name="classLoader">
        <New class="f.q.n.CustomWebAppClassLoader">
           <Arg><Ref id="mycontext1"/></Arg></New>
    </Set>
</Configure>

(有关详细信息,请参阅Jetty XML Syntax configuration reference。)

答案 1 :(得分:0)

作为使用上下文配置文件的替代方法,您可以在pom.xml文件中设置classloader属性,对于jetty&gt; = 8.x,例如不扫描WEB-INF中的任何类以加快启动速度:

<plugins>
  <plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>${jetty.version}</version>
    <configuration>
      <webApp>
        <webInfIncludeJarPattern>^$</webInfIncludeJarPattern>
      </webApp>
      <stopKey>foo</stopKey>
      <stopPort>9999</stopPort>
    </configuration>
  </plugin>
</plugins>

参考:Jetty plugin webapp configuration