如何配置maven-bundle-plugin

时间:2016-03-23 19:42:51

标签: eclipse maven eclipse-plugin osgi apache-felix

我正在尝试转换和Eclipse插件项目以使用Maven。我现有的项目有以下MANIFEST.MF:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Message Level Security Plugin
Bundle-SymbolicName: com.mls;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: MLS
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: com.ghc.ghTester.expressions
Bundle-ClassPath: lib/commons-logging-1.1.1.jar,
 lib/log4j-1.2.15.jar,
 .
Require-Bundle: org.bouncycastle.crypto;bundle-version="1.46.0",
 javax.xml;bundle-version="1.3.4",
 org.apache.wss4j;bundle-version="1.5.11",
 org.apache.xml.security;bundle-version="1.4.3002",
 org.apache.commons.lang;bundle-version="2.6.0"

但是我在确定如何配置maven-bundle-plugin以正确生成我的OSGI包时遇到了很大的困难:

我试过了:

    <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <version>3.0.0</version>
        <extensions>true</extensions>
        <configuration>
            <instructions>
                <Bundle-SymbolicName>${pom.groupId}.${pom.artifactId}</Bundle-SymbolicName>
                <Bundle-Name>${pom.name}</Bundle-Name>
                <Bundle-Version>${pom.version}</Bundle-Version>
                <Bundle-ClassPath>{maven-dependencies},.</Bundle-ClassPath>
                <Embed-Dependency>*;scope=compile|provided</Embed-Dependency>
                <Import-Package>com.ghc.ghTester.expressions</Import-Package>
            </instructions>
        </configuration>
    </plugin>

但是我如何生成&#34; Require-Bundle&#34;使用maven依赖关系的条目我已列为&#34;提供&#34;?

前:

<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.6</version>
    <scope>provided</scope>
</dependency>

我是否必须以不同方式声明我的依赖?

1 个答案:

答案 0 :(得分:2)

您可以在pom中明确添加Require-Bundle

<Require-Bundle>org.bouncycastle.crypto;bundle-version="1.46.0", ...</Require-Bundle>

然而,Require-Bundle是一种糟糕的(旧的)练习。 maven-bundle-plugin后面的bndtools可以为您生成正确的Import-Package。您不应再使用Require-Bundle标题。

此外:

  1. 1.4.0是一个非常古老的版本(2008)。尝试使用最新版本3.0.1
  2. 添加空<Export-Package/>标记:默认情况下,此插件会导出除*.internal.* *.impl.*之外的所有包。如果您的软件包不使用此约定,则可能会导出软件包的内部类。