如何在使用 maven-bundle-plugin 时形成 .bnd 文件?

How to form the .bnd files while using maven-bundle-plugin?

我想构建 osgi 组件,我被告知要使用 maven-bundle-plugin。我首先将其添加到我的 pom.xml:

        <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>3.0.0</version>
                <extensions>true</extensions>
                <configuration>
                    <obrRepository>NONE</obrRepository>
                    <instructions>
                        <_include>-bnd.bnd</_include>
                    </instructions>
                </configuration>
        </plugin>

注意传递给 <_include> 标记的 .bnd 文件。我听说有人说这些文件应该保持在最低限度,甚至是空的,然后应该观察 imports/exports 需要什么,等等。这就是我感到困惑的地方。我有我的 MANIFEST.MF 文件,其中我知道要导入和导出的内容。但是,我需要一些帮助才能使我的 .bnd 文件正常工作。现在我正在尝试使用空 .bnd 文件,但我不确定它是否正常工作。

有没有人对这个插件有任何经验以及我想让它工作的方式?

例如,here 是一个示例 .bnd 文件。但是我不知道他是怎么决定这些应该 imports/exports 的。

截至目前,当我尝试测试 .jar 我得到

no main manifest attribute, in bundle-1.0.0.jar

错误,尽管 .jar.

中确实存在 MANIFEST.MF

更新:我想我可以分享我以前的MANIFEST.MF,我现在想通过这个插件生成它。

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Just a Name
Bundle-SymbolicName: just.a.name.broker;singleton:=true
Bundle-Version: 1.0.0
Require-Bundle: org.apache.activemq,
 just.msg
Bundle-Activator: just.a.broker.Activator
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: javax.naming,
 javax.xml,
 javax.xml.parsers,
 org.apache.log4j.xml,
 org.osgi.framework
Bundle-ClassPath: .
Export-Package: just.a.broker

那么为了有这样一个清单,我的 .bnd 文件应该是什么样子的?还是将属性包含在插件中而不是传递 .bnd 文件更好?

您的 .bnd 文件可能如下所示:

Bundle-Activator: just.a.broker.Activator
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Require-Bundle: org.apache.activemq,\
  just.msg 

Import-Package: *,\
  javax.naming,\
  javax.xml,\
  javax.xml.parsers,\
  org.apache.log4j.xml,\
  org.osgi.framework

Bundle-ClassPath: .
Export-Package: just.a.broker

希望这对您有所帮助。