我正在尝试创建托管OSGi捆绑的战争。完整配置应该能够托管WAB捆绑包,现在我尝试集成pax-web-extender-war
。
它需要一些依赖项,如slf4j-api
和slf4j-log4j12
,这就是问题所在:我总是遇到这个异常:
org.osgi.framework.BundleException: Fragment bundles can not be started.
at org.apache.felix.framework.Felix.startBundle(Felix.java:1782)
因为slf4j-log4j12
实际上是一个片段包。我认为菲利克斯应该应对这一点,但事实并非如此。所以我试着将这个jar移到WEB-INF/lib
,但接线失败,因为osgi无法将其解析为捆绑包。
所以,
framework.properties
以下是战争的当前布局(请注意,它基于felix http网桥示例):
.
└── WEB-INF
├── bundles
│ ├── commons-fileupload-1.2.2.jar
│ ├── commons-io-2.4.jar
│ ├── hello-wab-1-SNAPSHOT.war
│ ├── org.apache.felix.http.bridge-2.2.0.jar
│ ├── org.apache.felix.http.samples.filter-2.2.0.jar
│ ├── org.apache.felix.webconsole-4.0.0.jar
│ ├── pax-web-api-2.1.0.jar
│ ├── pax-web-extender-war-2.1.0.jar
│ ├── pax-web-spi-2.1.0.jar
│ ├── slf4j-api-1.6.6.jar
│ ├── slf4j-log4j12-1.6.6.jar
│ └── wrapper-json-1-SNAPSHOT.jar
├── classes
│ └── org
│ └── apache
│ └── felix
│ └── http
│ └── samples
│ └── bridge
│ ├── FrameworkService.class
│ ├── ProvisionActivator.class
│ └── StartupListener.class
├── framework.properties
├── lib
│ ├── org.apache.felix.framework-4.0.3.jar
│ ├── org.apache.felix.http.proxy-2.2.0.jar
│ ├── org.apache.felix.webconsole-4.0.0.jar
│ ├── org.osgi.compendium-4.3.0.jar
│ └── wrapper-json-1-SNAPSHOT.jar
└── web.xml
答案 0 :(得分:1)
我建议在您的软件包中添加pax-logging,它将避免登录OSGi世界的痛苦。 Pax-Logging
对于片段包,您只需将它们添加到常用的包中即可。我会在你的设置中说可能在bundles文件夹中。因为它是一个片段包,所以你获得的Exception是正确的,它不是一个“可开始”的包。它只会解析并希望附加到托管包。
顺便说一句,Felix能够使用片段包:))