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



由于 jetty-osgi-boot 在 Jetty 8 和 Jetty 9 文档中进行了解释,我在 OSGi 容器中运行了 Jetty 8.1.12 服务器

我想配置默认的 Web 应用程序描述符 ( etc/webdefault.xml )。当我定义jetty.home时,码头拾取etc/jetty.xml但不加载etc/webdefault.xml

我不想依赖配置捆绑包(通过 jetty.home.bundle system 属性),因为我希望配置易于修改。

出于同样的原因,我不想依赖 Jetty-defaultWebXmlFilePath MANIFEST 标头,而且它会将我的 Web 应用程序绑定到码头。

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 类不再存在。

还有其他方法可以配置网络默认值.xml文件位置吗?

简短回答:在 OSGi 下.xml我不可能有码头 8.1.12 来加载网络默认值。

经过几个小时的谷歌搜索,源代码读取和调试,我得出了这些结论:

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

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

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

最新更新