我对 sbt 的复杂性不是很熟悉,但我最近开始建立一个有点类似的项目。这是我首先针对您的情况尝试的方法。
1)在与您的模块*文件夹相同的级别上创建一个“项目”子目录。
2)创建一个新文件“project/Build.scala”,内容如下。请务必将destPath
值更改为您需要的目录名称。此示例中的路径设置为使用war
每个模块中的文件夹与 Google App Engine 一起使用。
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
and copy-dependencies
,并且 sbt 会将类文件从webapp复制到module1和依赖的war/WEB-INF/classes
jar 到war/WEB-INF/lib
.
对于 Google App Engine,我在运行开发服务器或将项目上传到 apppot 之前执行此操作,并且它运行良好,尽管有朝一日能自动化该过程会更好。