需要帮助将第三方包装到捆绑包中

时间:2014-10-16 17:21:19

标签: java maven osgi bundle

我需要在我的代码中使用这两个包:

import org.apache.commons.validator.routines.DomainValidator;

import org.apache.commons.validator.routines.InetAddressValidator;

所以我需要抓住Apache commons-validator 1.4.0并将其作为捆绑包。

为此,我创建了一个新的maven项目,仅包含一个POM文件,其中POM包含以下内容:http://pastebin.com/qdbyuvhc

但是,当我编译这个项目时,生成的包清单将开始导入新的东西。在此处检查生成的MANIFEST.MF的Import-Package标记:http://pastebin.com/71LxAZ7Z

我希望它不会导入任何内容并且是自包含的。在使用OSGi时我讨厌这些东西,包括第三方依赖非常困难:(

如何使此捆绑包自包含?

3 个答案:

答案 0 :(得分:2)

Commons验证器似乎已经是一个捆绑。 Check on maven central。 除此之外,还有一个commons validator bundle from servicemix。如果您在某些时候需要它,servicemix bundle source code可以帮助您自己进行包装。

答案 1 :(得分:1)

您唯一需要的是将此捆绑包作为maven依赖项添加到项目的pom文件中,这是依赖性片段(来自SpringSource Repo):

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>com.springsource.org.apache.commons.validator</artifactId>
    <version>1.3.1</version>
</dependency>

此外,如果您拥有我们自己的Artifacts Repository,我建议您从here下载依赖jar,并将其添加到Artifacts Repository(例如Nexus或其他)。然后将SpringSource Enterprise Bundle Repository添加到Artifacts Repository Proxy Repositories。

快速常见问题解答

<强> 1。但我可以使用commons.validator 1.4.0吗?

不,你不能,apache.commons.validator的当前重新打包是版本1.3.1。

<强> 2。如果我真的想使用版本1.4.0,是否有解决方法?

也许吧!你可以尝试重新包装运气,这page似乎为你指明了实现这一目标的好方法。链接页面上的帖子似乎尝试使用http://www.eclipse.org/tycho/创建一个包裹 apache.commons.validator-1.4.0.jar 的包。

答案 2 :(得分:1)

您可以在结果清单中控制导入与否,只需将其添加到说明标记中:

<Import-Package>!DontWantThisPackage</Import-Package>

顺便说一下,一些公共验证器依赖关系已经捆绑了,所以不适合将它嵌入你的包中。

为了嵌入依赖项,我建议您直接在捆绑依赖项中添加它们(而不是使用传递依赖项)