私はsbtの複雑さにあまり精通していませんが、最近、やや似たようなプロジェクトを立ち上げ始めました。これが私があなたの状況のために最初に試みることです。
1)モジュール*フォルダと同じレベルに「プロジェクト」サブディレクトリを作成します。
2)次の内容の新しいファイル「project/Build.scala」を作成します。必ずdestPath
値を必要なディレクトリ名に変更してください。この例のパスは、各モジュールwar
内のフォルダーを使用してGoogleAppEngineで動作するように設定されています。
import sbt._
import Keys._
object MyBuild extends Build {
lazy val copyDependencies = TaskKey[Unit]("copy-dependencies")
def copyDepTask = copyDependencies <<= {
(dependencyClasspath in Runtime, baseDirectory) map { (dep, bp) =>
for (attrSrcPath <- dep) {
val srcPath = attrSrcPath.data
println(srcPath);
if (!srcPath.isDirectory) {
val destPath = bp / "war/WEB-INF/lib" / srcPath.getName
IO.copyFile(srcPath, destPath, preserveLastModified=true)
}
else {
val destPath = bp / "war/WEB-INF/classes/"
IO.copyDirectory(srcPath, destPath, preserveLastModified=true)
}
}
}
lazy val webapp = Project("webapp", file("sharedlibrary/webapp"))
lazy val module1 = Project("module1", file("module1"),
settings = Project.defaultSettings ++ Seq(copyDepTask)
) dependsOn(webapp)
lazy val module2 = Project("module2", file("module2"),
settings = Project.defaultSettings ++ Seq(copyDepTask)
) dependsOn(webapp)
lazy val module3 = Project("module3", file("module3"),
settings = Project.defaultSettings ++ Seq(copyDepTask)
) dependsOn(webapp)
}
3)sbt内から、とを入力するproject module1
とcopy-dependencies
、sbtはクラスファイルをwebappからmodule1war/WEB-INF/classes
に、依存jarをにコピーしますwar/WEB-INF/lib
。
Google App Engineの場合、開発サーバーを実行する前、またはプロジェクトをappspotにアップロードする前にこれを行います。これは正常に機能しますが、いつかプロセスを自動化するとよいでしょう。