处理JBoss Fuse中非OSGI依赖项的传递依赖性

时间:2015-10-27 09:17:18

标签: java fuseesb jbossfuse fabric8

我正在使用JBoss Fuse 6.2和Fabric。我有一个编译成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

2 个答案:

答案 0 :(得分:2)

不,你必须列出所有依赖项,欢迎来到OSGi土地。

我们尝试使用名为 FAB [1] - Fuse Application Bundles的东西为OSGi添加Maven的易用性。但这两个世界太不同了。因此,在OSGi的土地上,您最好不得不列出功能文件中的所有依赖项。

答案 1 :(得分:0)

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

Fuse管理控制台(Hawtio)的步骤如下:

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

Fabric透视图 - &gt;维基 - &gt;创建 - &gt; Fabric8档案

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

希望这有助于某人