Eclipse覆盖由maven bundle plugin

时间:2017-01-10 08:16:36

标签: eclipse maven osgi

我正在使用maven-bundle-plugin为OSGi容器生成MANIFEST.MF。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Export-Package>com.example.mypackage</Export-Package>
                </instructions>
            </configuration>
            <executions>
                <execution>
                    <id>bundle-manifest</id>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>manifest</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

然而,该清单文件在Eclipse(4.6.1 Neon)之后被破坏(覆盖),例如,Maven / Update Project或Clean / Build。

是否有可能让Eclipse以某种方式了解maven插件,而不是破坏它们的输出?我应该设置什么来防止(错误)行为?

如果不能用Eclipse解决这个问题,那么使用IntelliJ会更好吗? IDE中的OSGi支持对我来说非常重要......

2 个答案:

答案 0 :(得分:0)

我必须改变我的回答。我错过了你定义目标清单的部分。这是使用maven bundle plguin的新的推荐方法,但它要求你告诉jar插件使用现有的Manifest。

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.5</version>
            <configuration>
                <archive>
                    <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
                </archive>
            </configuration>
        </plugin>

旧答案

我怀疑你正在使用Eclipse PDE。 PDE始终首先使用Manifest。这意味着它与maven-bundle-plugin不兼容。

我建议使用普通的maven构建,我们在Apache Karaf或Apache Aries等apache项目中大量使用。它缺乏Eclipse PDE的特殊OSGi支持,但无论如何这都很糟糕。

您可以使用eclipse插件bndtools来扩充它。 Bndtools现在提供一定程度的maven支持。这意味着您现在可以为项目提供基于maven的OBR索引,并定义在bndrun文件中启动哪些捆绑包。这允许在Eclipse中直接启动和调试OSGi项目。请参阅osgi-chat example了解如何操作。

请注意,bndtools最近刚开始使用maven支持。因此,当前版本3.3.0仍然缺少maven构建的一些便利性。

答案 1 :(得分:0)

使用我的配置:

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>3.3.0</version>
    <extensions>true</extensions>
    <configuration>
      <manifestLocation>src/main/resources/META-INF</manifestLocation>
      <rebuildBundle>true</rebuildBundle>
      <instructions>
        <Bundle-SymbolicName>${project.artifactId};singleton:=true</Bundle-SymbolicName>
      </instructions>
    </configuration>
  </plugin>

安装了插件: m2e连接器:http://download.eclipse.org/m2e-wtp/releases/neon/ BND工具:http://bndtools.org/

Eclipse构建最终没有销毁清单文件。但是必须进行一些迭代(maven build,Update Maven Dependencies,Eclipse Build,maven build)。此外,我还删除了文件系统上所有与项目相关的设置:.classpath,.project,.factorypath,.settings,.apt_generated,target。希望有所帮助。