2013-12-11 9 views
6

私は、多数のサブプロジェクトと外部ライブラリの依存関係を持つsbtプロジェクトを持っています。 build.sbtはこのように書きます:サブプロジェクトでsbtネイティブパッケージャを使用する方法(sbt 0.13)

val extlib1 = "xy.xxx" % "lib1" % "1.0+" 
val extlib2 = "xy.yyy" % "lib2" % "1.0+" 
val extlib3 = "xy.zzz" % "lib3" % "1.0+" 

lazy val core=project settings (
    name:="cor", 
    libraryDependencies++=Seq(extlib1) 
) 

lazy val servercore=project settings (
    name:="srvcore", 
    libraryDependencies++=Seq(extlib1,extlib2) 
) dependsOn(core) 

lazy val masterserver=project settings (
    name:="mastersrv", 
    mainClass:=Some("masterserver") 
) dependsOn(servercore) 

lazy val otherserver=project settings (
    name:="othersrv", 
    libraryDependencies++=Seq(extlib3), 
    mainClass:=Some("otherserver") 
) dependsOn(servercore) 

// Only for aggregating the builds of the subprojects 
lazy val root=project in file(".") settings(name:="proj") aggregate(
    core,servercore,masterserver,otherserver 
) 

だから、実際にプロジェクトが外部ライブラリと、このプロジェクト自体のサブプロジェクトのサブセットに依存していくつかのプログラム(「マスターサーバー」、「otherserver」)を作成します。

マスターサーバーまたは他のサーバーを起動するために必要なJARの完全なセットは、ごとに区切られたです。だから、私はしたいと思います。同様のコンテンツと

mastersrv.jar 
srvcore.jar (needed by mastersrv.jar) 
cor.jar  (needed by srvcore.jar) 
lib1.jar  (needed by mastersrv and srvcore) 
lib2.jar  (needed by srvcore) 
<whatever>.jar (further libs needed by lib1 or lib2) 

otherserver/target/<whatever>を含むmasterserver/target/<whatever>(それはそれはothersrv.jarの必要に応じて、またlib3.jarを追加する必要があります。それを行うにはどのように

?私はネイティブパッケージャでこれを行うことができますか?発行(何mailClassがないため?)ルートプロジェクトでstageは何もしません。masterserver/stateを発行すると、エラーメッセージ

を与える
> masterserver/stage 
[error] No such setting/task 
[error] masterserver/stage 
[error]     ^

Iムー私は、ネイティブのpackagerプラグインのドキュメントから実際の手がかりを得られないことを認めています。私が望むものをどのようにアーカイブすることができますか?

編集:もちろん、私はディレクトリのものに縛られていません。メインのtargetディレクトリに複数のZIPファイルがある場合は、それもo.kです。私は1つの場所にサブプロジェクトのすべての依存関係を持ちたいだけです。

編集2:OK、私はPlay!フレームワークはまさに​​私が望むものです。そして、それはsbtネイティブパッケージャを使用します。プログラミング言語としてJavaを使用するPlay以外のSBT処理プロジェクトで、サブプロジェクトの再帰的なパッケージングを実現するにはどうすればよいですか?

答えて

7

私はちょっと試してみると答えはかなり簡単でした。まず、サブプロジェクトbuild.sbtでネイティブパッケージャの設定を入れ、その後、プロジェクト・グローバルproject/plugins.sbt

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "0.6.4") 

でネイティブパッケージャを置きます。上記の例では、masterserver/build.sbtに次のように置く:

// Setup the packager 
packageArchetype.java_application 

// Enable JAR export for staging 
exportJars := true 

必要なJARファイルのセットは、サブプロジェクトの設定の残りが滞在することができます。この例ではmasterserver/target/universal/stage/lib

に、サブプロジェクトのtargetディレクトリに置かれますグローバルbuild.sbtでは、しかし、私はその方法をネイティブパッケージャを構成する方法が見つかりませんでした。

+0

自己応答ありがとうございます。私はそれが非常に役に立ちました:) – opyate

+1

この回答はおそらく、 'sbt-native-packager'の1.x行で使われている' sbt 'AutoPlugin'機能の使用を反映するように更新されるべきです。 – metasim

+0

実際、答えは2年以上経っています。残念ながら、私たちはそれ以来、私たちのツールチェーンを変更したり更新したりしていないので、私はAutoPluginの経験がないことを認めなければなりません。 :-( –

関連する問題