JBoss Fuse与标准Maven依赖关系

时间:2015-03-15 18:28:54

标签: osgi apache-karaf osgi-bundle jbossfuse

我刚学习OSGi,JBoss Fuse(6.1)和Karaf。如何在不更改它们的情况下使用标准(而不是捆绑)Maven依赖项?

我有一个简单的Maven捆绑项目。这取决于一些第三方图书馆。它通过blueprint.xml使用它们。我理解如果manifest.mf标记Import-Package条目中的包,那么必须在其manifest.mf中安装带有Export-Package的包。在我的情况下,如果我安装这些标准的Maven项目,他们将无法导出所需的包。所以我在捆绑中得到了#34;未解决的约束"安装过程中出现错误消息。 Maven Bundle或Shade插件能够解决这个问题吗?或者,如果他们不能解决依赖关系的最优雅方式?

在某处,我已经阅读过Jboss Fuse能够解析Maven存储库中的依赖项。我能以某种方式使用这种机制吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

与此同时,我发现了一个几乎不错的解决方案:使用wrap:命名空间/前缀Fuse会在安装过程中自动生成一个包:

osgi:install -s wrap:mvn:cglib/cglib/2.2.2

但我仍然需要手动安装每个依赖项。有没有办法自动化依赖项的安装?

THX!

答案 1 :(得分:0)

使用Bundle-ClassPath清单标头。 确保所有maven依赖项都在最终jar文件中的名为' lib'的单个目录下可用。(这可以使用maven resources插件来实现,该插件可以复制任何输出目录中的maven依赖项)。

使用maven-bundle-plugin并使用其元素自定义bundle manifest Bundle-ClassPath属性。添加lib文件夹的路径,以便所有普通的vanilla jar都可以作为bundle classpath的一部分使用。

答案 2 :(得分:0)

现在可能有点晚了,但你可以使用功能来做到这一点。

<features>
    <feature name="wrap_features" version="1.0">
        <bundle>mvn:org.apache.commons/com.springsource.org.apache.commons.logging/1.1.1</bundle>
        <bundle>wrap:mvn:org.jdbi/jdbi/2.70</bundle>
        <bundle>wrap:mvn:com.microsoft/sqljdbc4/4.2</bundle>
        <bundle>wrap:mvn:org.springframework/spring-web/4.2.4.RELEASE</bundle>
        <bundle>wrap:mvn:org.springframework.security/spring-security-core/4.0.3.RELEASE</bundle>
        <bundle>mvn:com.doi.ws/mssql-fragment/1.0.0</bundle>
        <bundle>mvn:com.doi.ws/mssql-impl/1.0.0</bundle>
        <bundle>mvn:com.doi.ws/doi-services/1.0</bundle>
    </feature>
</features>

在使用功能命令

将项目部署到保险丝服务器之前安装功能