3

我正在使用 SBT/scala,但这个问题也适用于 Maven/Java 项目,因为 SBT 基于 Maven 结构。

我想设置一个共享通用 webapp 部署的多模块应用程序。我应该如何在 Maven/SBT 中构建我的项目并在打包步骤中使用 webapp?

结构体

sharedlibrary/
   webapp/
module1
module2
module3

所以当我打包module1(取决于sharedlibrary)时,我希望webapp包含在最终的war文件中。webapp 将有代码根据它启动的服务器加载正确的 Module1 Main 类。在 maven/sbt 中以一种简单的方式可能吗?

4

2 回答 2

1

我对 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 module1and copy-dependencies,并且 sbt 会将类文件从webapp复制到module1和依赖的war/WEB-INF/classesjar 到war/WEB-INF/lib.

对于 Google App Engine,我在运行开发服务器或将项目上传到 apppot 之前执行此操作,并且它运行良好,尽管有朝一日能自动化该过程会更好。

于 2012-05-26T15:56:21.807 回答
0

是的

参见 SBT 多项目:

https://github.com/harrah/xsbt/wiki/Getting-Started-Multi-Project

和 sbt-assembly 插件:

https://github.com/sbt/sbt-assembly

于 2012-05-26T07:27:16.183 回答