2014-01-15 8 views
7

ビルドシステムとしてSBTを使用し、Scala/JavaとネイティブソースをJNIと組み合わせたプロジェクトがあります。SBTプロジェクトが2つの成果物を公開するための慣習的な方法は何ですか?

この種のプロジェクトを公開する私の現在の計画は、純粋なバイトコード(ネイティブバイナリの参照はエンドユーザに任されています)と1つの脂肪jarには、ネイティブライブラリが含まれ、自動的に抽出されます。

ファットjarを生成するために、packageFatというタスクを作成しました。このタスクは基本的にネイティブライブラリと追加の接尾辞「-fat」を付加したタスクpackageBinをコピーします。

ビルド構成の関連部分をここに見ることができます:https://github.com/jodersky/flow/blob/master/project/nativefat.scala

をしかし、このような構成で、鉱山に依存し、脂肪のjarファイルを含めることを望むすべてのプロジェクトは、このフォームで依存関係を宣言しなければなりません:

libraryDependencies += "<organization>" %% "<name>" % "<version>" artifacts Artifact("<name>-fat", "jar", "jar")

私はJNIを使​​用してプロジェクトを配布することは一種の不器用ですが、最後の「%」の後の部分は、依存関係は本当に厄介になることを知っています。だから私の質問は、一つのプロジェクトから一つの普通の瓶と一つの脂肪の瓶を発行す​​るSBTの慣用的な方法は何ですか?

+0

https://github.com/sbt/sbt-assemblyについてお考えですか?パブリッシュすると、パッケージをビルドするか、実際にパッケージをリポジトリにアップロードすることを意味しますか? – pedrofurla

+0

実際にネイティブライブラリを含むリポジトリにjarをアップロードし、必要なときに正しいライブラリを抽出したいと思います。 –

答えて

4

私は「プレーン」に公開されるコアサブプロジェクトとmulti projectビルドファイル、およびJNIで公開する予定脂肪のサブプロジェクトを作成し、その後、あなたはfoo-corefoo-fatのような二つの異なるアーティファクト名を、使用することができます。実際に

foo-fatfoo-coreにを依存でき、独自のアーティファクトはJNIのもので構成されます。

関連する問題