我试图在OSGi容器内的多个bundle之间共享Struts包时遇到了这个问题.我想避免在bundle中复制依赖关系并在它们之间引入新的依赖关系(通过让一个bundle导出其内部依赖关系以供另一个共享).
事实证明,如果您碰巧使用Maven,答案非常简单,如果您不是,您仍然可以使用Maven解决方案来学习如何使用其他机制创建相同的结果.
我在项目期间发现这种方法多次有用,所以我将在这里发布一个例子.
使用Maven,可以很容易地从任何库创建OSGi包.但是,我认为也可以使用其他机制创建相同的结果.Maven解决方案帮助我了解它的工作原理.
创建包是通过创建具有图书馆作为一个依赖关系的项目,然后用包装项目进行Maven的捆插件从Apache的Felix项目,并与指定库包Export-Package
指令.我用它在OSGi容器中的bundle之间共享Google Protocol Buffers:
<?xml version="1.0" encoding="UTF-8" ?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.lib</groupId>
<artifactId>protobuf-dist</artifactId>
<version>2.1.0</version>
<name>Google Protocol Buffers OSGi Distribution</name>
<packaging>bundle</packaging>
<dependencies>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>2.1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Export-Package>com.google.protobuf</Export-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
</project>
Run Code Online (Sandbox Code Playgroud)
如果您希望将所有传递依赖项都集成到bundle中,请使用bundleall
插件的目标.
该插件识别并尊重依赖项中现有的OSGi清单.
您还可以使用bundle插件来创建清单并告诉jar
包装插件(或jar-with-dependencies
内置程序集)通过归档部分使用该清单.上面链接的插件页面显示了如何执行此操作.
归档时间: |
|
查看次数: |
7409 次 |
最近记录: |