2

我正在使用带有 Fabric 的 JBoss Fuse 6.2。我有一个编译成 OSGI 包的应用程序。应用程序依赖于一个非 OSGI jar 文件 (multiplier.jar),而这对另一个非 OSGI jar 文件 (adder.jar) 具有传递依赖。

应用程序包和两个依赖项都位于本地 Maven 存储库中。

我定义了一个 features.xml 文件,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<features name="CamelLogRepo" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0">
  <feature name="multiplier-logger">
    <bundle>mvn:org.jboss.quickstarts.fuse/beginner-camel-log/6.2.0.redhat-133</bundle>
    <bundle>wrap:mvn:com.acme.math.multiply/multiplier/1.0</bundle>
    <bundle>wrap:mvn:com.acme.math.add/adder/1.0</bundle>
  </feature>
</features>

然后我在 Fuse 控制台中运行这些命令:

fabric:profile-create --parent feature-camel logger-profile
fabric:profile-edit --repository file:C:/Tools/jboss-fuse-6.2.0.redhat-133/quickstarts/beginner/camel-log/features.xml logger-profile
fabric:profile-edit --feature multiplier-logger logger-profile
fabric:container-create-child --profile logger-profile root logger

这行得通。

但是,我必须在 features.xml 文件中列出所有传递依赖项。有没有办法避免这种情况?

我的印象是 Fuse 可以进行 Maven 依赖查找,所以如果一个依赖在存储库中有一个 pom.xml 列出另一个依赖,Fuse 会自动加载该依赖。有什么方法可以实现这一点并使 Fuse 自动将wrap:协议用于非 OSGI 依赖项?

可以在此处找到具有两个依赖项的完整测试应用程序:https ://www.dropbox.com/s/rm1kcctvnwlvb2d/transitive2.zip?dl=0

4

2 回答 2

2

不,您必须列出所有依赖项,欢迎来到 OSGi 领域。

我们试图通过称为FAB [1] - Fuse Application Bundles 的东西将 Maven 的易用性添加到 OSGi。但这两个世界实在是太不一样了。因此,不幸的是,在 OSGi 领域,您最好在功能文件中列出所有依赖项。

于 2015-10-28T17:40:23.770 回答
0

如果我错了,请纠正我,但我认为您也可以通过 Fuse/Fuse-Fabric 提供的 Hawtio GUI 添加依赖项,与使用 karaf 控制台处理配置文件及其功能/功能存储库相比,这将节省时间从可用功能列表中进行选择时,您可以避免拼写错误。

Fuse Management Console (Hawtio) 上的程序如下:

host:8181/hawtio让 Fabric 启动并运行,如果尚未完成,请转到并创建配置文件,如下所示:

Fabric 透视图 --> Wiki --> 创建 --> Fabric8 Profile

在配置文件详细信息屏幕上,您可以轻松添加所需的父项或依赖项功能,以及功能存储库和工件部署,可以在其上添加 maven 编译工件和包装工件。如果发生错误,那么它们很可能会在该服务器/容器的控制台日志上指示缺少功能依赖项。

希望这可以帮助某人

于 2018-04-26T15:19:11.240 回答