6

多数のサブプロジェクトと外部ライブラリの依存関係を持つ sbt プロジェクトがあります。build.sbt次のようになります。

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
)

したがって、実際にはプロジェクトは、外部ライブラリとこのプロジェクト自体のサブプロジェクトのサブセットに依存するいくつかのプログラム (「masterserver」、「otherserver」) を作成します。

私が必要としているのは、マスターサーバーまたは他のサーバーを起動するために必要な JAR の完全なセットで、それぞれに区切られています。だから、私は例えばmasterserver/target/<whatever>含むことを望みます

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>同様のコンテンツをlib3.jar持つothersrv.jar.

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

> masterserver/stage
[error] No such setting/task
[error] masterserver/stage
[error]                   ^

ネイティブ パッケージャー プラグインのドキュメントから本当の手がかりを得られないことを認めなければなりません。必要なものをアーカイブするにはどうすればよいですか?

編集:もちろん、私はディレクトリのものに縛られていません。targetメインディレクトリに複数の ZIP ファイルを取得しても問題ありません。サブプロジェクトのすべての依存関係を 1 つの場所に配置したいだけです。

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

4

1 に答える 1