如何让Jetty在OSGi中运行时加载webdefault.xml?

时间:2013-09-08 11:49:13

标签: jetty osgi jetty-8

我正在OSGi容器中运行Jetty 8.1.12服务器,这要归功于jetty-osgi-boot,如Jetty 8Jetty 9文档中所述

我想配置默认的webapp描述符(etc/webdefault.xml)。当我定义jetty.home时,码头会选择etc/jetty.xml,但不会加载etc/webdefault.xml

我不想依赖配置包(通过jetty.home.bundle系统属性),因为我希望配置容易修改。

出于同样的原因,我不想依赖Jetty-defaultWebXmlFilePath MANIFEST标题,而且它会将我的webapp绑定到jetty。

jetty-osgi-boot软件包包含jetty-deployer.xml configuration file这个已注释掉的块:

 <!-- Providers of OSGi Apps -->
  <Call name="addAppProvider">
    <Arg>
      <New class="org.eclipse.jetty.osgi.boot.OSGiAppProvider">
        <Set name="defaultsDescriptor"><Property name="jetty.home" default="."/>/etc/webdefault.xml</Set>
        ...

不起作用,因为OSGiAppProvider类不再存在。

是否有其他方法可以配置webdefaults.xml文件位置?

1 个答案:

答案 0 :(得分:0)

简短回答:我无法使用jetty 8.1.12在OSGi下加载webdefaults.xml。

经过数小时的谷歌搜索,源阅读和调试,我得出了这些结论:

  • Jetty-defaultWebXmlFilePath MANIFEST标头未按预期工作。它无法解析包条目路径,只能解析绝对文件系统路径。绝对FS路径不是一个现实的选择。

  • 大部分配置都是ServerInstanceWrapperBundleWebAppProvider之类的硬编码所以我们无法配置默认描述符位置。此位置最终为默认值,即IIRC,org/eclipse/jetty/webapp/webdefault.xml

我使用了修补jetty-osgi,以便它可以读取一些配置并将其应用到BundleWebAppProvider。 FWIW这个黑客可在github

上找到