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