【问题标题】:How to build java projects as OSGi Deployment Packages with Maven using Tycho?如何使用 Tycho 使用 Maven 将 java 项目构建为 OSGi 部署包?
【发布时间】:2015-05-13 04:13:57
【问题描述】:

我有一些 Java/OSGi 项目希望构建并打包为单个部署包。

我正在使用 Tycho 为特定目标平台编译源代码,所有依赖项都在本地 p2 存储库中。

如果我在我的 pom.xml 中设置 <packaging>eclipse-plugin</packaging>,构建会正常,但我会得到一个 .jar 作为输出。
当我使用 maven-bundle-plugin 并设置 <packaging>bundle</packaging> 时,构建中断,因为它使用标准 maven-compiler-plugin 而不是 Tycho 进行编译。

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>2.3.5</version>
    <extensions>true</extensions>
    <configuration>
        <manifestLocation>META-INF</manifestLocation>
        <instructions>
            <Bundle-SymbolicName>${project.artifactId};singleton:=true</Bundle-SymbolicName>
            <Bundle-Name>${project.name}</Bundle-Name>
            <Bundle-Version>${project.version}</Bundle-Version>
            <Import-Package>
                javax.net;resolution:=optional,
                javax.net.ssl;resolution:=optional
            </Import-Package>
            <Export-Package>my.project.package</Export-Package>
        </instructions>
    </configuration>
</plugin>

如何强制使用 Tycho 进行编译?或者有什么其他方法可以做我需要的吗?

【问题讨论】:

  • 如果您的依赖项位于 P2 存储库中,您最好使用 Tycho 和 eclipse-plugin 打包。这将为每个项目创建一个 OSGi 包 jar。之后你想做什么? single Deployment Package 是什么意思? (zip、P2、一些特定于容器的包?)
  • 我想将许多项目(=OSGi 包)打包到一个 .dp 文件中。 Deployment PackageOSGi Service Platform Service Compendium 的“114 部署管理规范”段中定义。基本上,把所有这些罐子放在一个大罐子里:这就是 dp。
  • 我不知道现有 maven 插件中对 Deployment Admin 的任何支持,也不知道任何使用它的容器。如果您确实想像这样打包您的捆绑包,maven assembly plugin 可能是一个选项。
  • 感谢您的提示,我会深入研究maven assembly plugin。我可以手动构建 DP,所以我很确定我所做的是正确的……另一方面,这违背了使用 Maven 的全部目的。
  • 作为 Tycho 提交者,我从未听说过构建部署包的要求。如果你想提升需求,你应该open an enhancement request in Tycho's issue tracker

标签: java maven osgi tycho osgi-bundle


【解决方案1】:

这个答案可能来得有点晚,但我最近创建了一个 Maven 插件“de.dentrassi.maven:osgi-dp”,它可以创建那些“DP”。

见:https://ctron.github.io/osgi-dp/plugin-info.html

您可以创建一个专门的“dp”打包或重新使用 Eclipse Tycho 的功能元数据:

<plugin>
    <groupId>de.dentrassi.maven</groupId>
    <artifactId>osgi-dp</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>
</plugin>

有关使用 Tycho 进行编译和使用“osgi-dp”创建部署包的完整示例,请参阅integration test at GitHub

【讨论】:

    猜你喜欢
    • 2012-05-07
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 2014-04-10
    • 2011-11-16
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    相关资源
    最近更新 更多