由于 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 路径不是一个现实的选择。 -
大部分配置都是用
ServerInstanceWrapper
和BundleWebAppProvider
之类的硬编码的,因此我们无法配置默认描述符位置。此位置最终为默认值,即 IIRCorg/eclipse/jetty/webapp/webdefault.xml
。
我求助于修补 jetty-osgi,以便它可以读取一些配置并将其应用于BundleWebAppProvider
。FWIW 这个黑客可以在 github 上找到