6

sbtosgiプラグインを使用して、 bndを使用してsbtビルドからOSGiバンドルを生成しています。sbtosgiバンドルは、バンドルを生成するためのosgi-bundleタスクを提供します。sbtosgiのデフォルト構成を使用して、sbtプロンプトからosgi-bundleを実行すると、JARが更新されて適切なヘッダーが含まれますが、クリーンなパッケージを実行すると、OSGiヘッダーのないJARになります。Mavenの話では、packaging = bundleでmaven-bundle-pluginを使用するのと同じことをしようとしています。つまり、プロジェクトの主な成果物は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 に答える