在多模块 Java/scala 项目中有一个通用的 webapp?
Posted
技术标签:
【中文标题】在多模块 Java/scala 项目中有一个通用的 webapp?【英文标题】:Have a common webapp in a multi module Java/scala project? 【发布时间】:2012-06-01 05:50:51 【问题描述】:我使用的是 SBT/scala,但这个问题也适用于 Maven/Java 项目,因为 SBT 基于 Maven 结构。
我想设置一个多模块应用程序,共享一个通用的 webapp 部署。我应该如何在 Maven/SBT 中构建我的项目并在打包步骤中使用 webapp?
结构
sharedlibrary/
webapp/
module1
module2
module3
所以当我打包 module1(取决于 sharedlibrary)时,我希望 webapp 包含在最终的 war 文件中。 webapp 将有代码根据它启动的服务器加载正确的 Module1 Main 类。这在 maven/sbt 中是否可以轻松实现?
【问题讨论】:
【参考方案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 module1
和 copy-dependencies
,sbt 会将类文件从 webapp 复制到 module1 的 @987654326 @ 和依赖 jar 到 war/WEB-INF/lib
。
对于 Google App Engine,我在运行开发服务器或将项目上传到 apppot 之前执行此操作,它运行良好,但如果有一天能进一步自动化该过程会更好。
【讨论】:
【参考方案2】:是的
查看 SBT 多项目:
https://github.com/harrah/xsbt/wiki/Getting-Started-Multi-Project
和 sbt-assembly 插件:
https://github.com/sbt/sbt-assembly
【讨论】:
以上是关于在多模块 Java/scala 项目中有一个通用的 webapp?的主要内容,如果未能解决你的问题,请参考以下文章