gpt4 book ai didi

java - 在多模块 Java/scala 项目中有一个通用的 webapp?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:13:19 26 4
gpt4 key购买 nike

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

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

结构

sharedlibrary/
webapp/
module1
module2
module3

所以当我打包 module1(依赖于共享库)时,我希望 webapp 包含在最终的 war 文件中。 Web 应用程序的代码会根据它在哪个服务器上启动来加载正确的 Module1 主类。在 maven/sbt 中这可能以一种简单的方式实现吗?

最佳答案

我不是很熟悉 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 module1copy-dependencies,sbt 将从 webapp 复制类文件到 module1war/WEB-INF/classes 和从属 jar 到 war/WEB-INF/lib

对于 Google App Engine,我在运行开发服务器或将项目上传到 appspot 之前执行此操作,它工作正常,但如果有一天能使该过程更加自动化会很好。

关于java - 在多模块 Java/scala 项目中有一个通用的 webapp?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10757930/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com