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

我在一个OSGi容器中运行了Jetty 8.1.12服务器,这要感谢jetty-osgi-boot,如Jetty 8和Jetty 9文档中所述

我想配置默认的webapp描述符( etc/webdefault.xml )。 当我定义jetty.home ,jetty拿起etc/jetty.xml但它不加载etc/webdefault.xml

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

我不想依靠Jetty-defaultWebXmlFilePath MANIFEST标头出于同样的原因,再加上它会将我的webapp绑定到码头。

jetty-osgi-boot软件包包含一个jetty-deployer.xml配置文件,其中包含这个注释掉的块:

 <!-- 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文件位置?


简短的回答:我不能让jetty 8.1.12来加载OSGi下的webdefaults.xml。

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

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

  • 很多配置在ServerInstanceWrapperBundleWebAppProvider硬编码中,所以我们不能配置默认描述符的位置。 此位置结束为默认值,即IIRC, org/eclipse/jetty/webapp/webdefault.xml

  • 我采取了修补jetty-osgi的方式,以便它可以读取一些配置并将其应用于BundleWebAppProvider 。 FWIW这个黑客可以在github上找到

    链接地址: http://www.djcxy.com/p/74737.html

    上一篇: How to make Jetty load webdefault.xml when it runs in OSGi?

    下一篇: Full Android support for OSGi bundles