如何使用 sbtosgi 生成 osgi 包作为 sbt 发布任务的一部分
Posted
技术标签:
【中文标题】如何使用 sbtosgi 生成 osgi 包作为 sbt 发布任务的一部分【英文标题】:How to use sbtosgi to generate osgi bundle as part of sbt publish task 【发布时间】:2012-04-29 23:01:07 【问题描述】:我正在使用sbtosgi plugin 从使用 bnd 的 sbt 构建生成 OSGi 包。 sbtosgi 包提供了 osgi-bundle 任务来生成包。使用 sbtosgi 的默认配置,从 sbt 提示符运行 osgi-bundle 会更新 JAR 以包含正确的标头,但运行 clean package 会导致 JAR 没有 OSGi 标头。在 Maven 中,我正在尝试将 maven-bundle-plugin 与 Packaging = bundle 一起使用——也就是说,项目的主要工件应该是一个 OSGi 包。
根据阅读 sbtosgi 插件的源代码,在我看来,osgi-bundle 任务覆盖了 packageBin 创建的 JAR。我尝试覆盖 packageBin 的定义,以便它使用 osgi-bundle 任务而不是默认任务:
packageBin in Compile <<= OsgiKeys.bundle
这导致了循环引用:
[error] Cyclic reference involving
[error] file:project/*:osgi-bundle
[error] file:project/compile:full-classpath
[error] file:project/compile:exported-products
[error] file:project/compile:package-bin
我对 SBT 比较陌生,我不知道从哪里开始。任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:看起来我最初通过 Twitter 提出的您使用的建议不起作用。对此感到抱歉。但幸运的是,我让 Mark Harrah 坐在我旁边,这是一个可行的解决方案:
packagedArtifact in (Compile, packageBin) <<= (artifact in (Compile, packageBin), OsgiKeys.bundle).identityMap
artifact in (Compile, packageBin) ~= (_.copy(`type` = "bundle"))
【讨论】:
以上是关于如何使用 sbtosgi 生成 osgi 包作为 sbt 发布任务的一部分的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 maven 项目轻松部署到 Karaf Osgi 容器
如何使用 Maven 将第 3 方 OSGi 捆绑包添加到部署包中?