6

我正在使用sbtosgi 插件从使用 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 很陌生,我不知道从这里去哪里。任何帮助,将不胜感激。

4

1 回答 1

5

看起来我最初通过 Twitter 提出的建议不起作用。对此感到抱歉。但幸运的是,我让 Mark Harrah 坐在我旁边,这是一个可行的解决方案:

packagedArtifact in (Compile, packageBin) <<= (artifact in (Compile, packageBin), OsgiKeys.bundle).identityMap

artifact in (Compile, packageBin) ~= (_.copy(`type` = "bundle"))
于 2012-04-18T15:56:45.720 回答