我正在开展的项目是Lift Framework 上的一个webapp .我们也在使用xsbt web插件.有一个"核心"项目,其中包含绝大多数功能; 我目前的目标是创建两个"分发"项目,为"核心"项目添加一组不同的类路径资源.问题是,我要么1)无法运行"分发"项目,要么2)让它们运行,但所需的资源似乎不存在.
我试过的
这是我的精简版project/Build.scala:
lazy val core = Project("Core", file("core"))
.settings( /*some dependencies, resolvers, webSettings */ )
lazy val app1 = Project("App1", file("app1"))
.aggregate(core)
.settings( /*the same settings as core */ )
lazy val app2 = Project("App2", file("app2"))
.aggregate(core)
.settings( /*the same settings as core*/ )
Run Code Online (Sandbox Code Playgroud)
然后,在两个目录结构app1和app2,我有一个文件src/main/resources/aFileINeed.核心应用程序正在使用该class.getResource方法从类路径加载文件.
问题
如果我尝试运行其中一个分发项目container:start,则不会在类路径中检测到所需的文件.此外,它声称它src/main/webapp不是现有目录(该文件夹包含在核心项目中,因为xsbt web插件需要它).
我怎样才能让这些项目"合并"他们的资源?我期望使用aggregate或dependsOn在Build.scala项目定义中为我处理,但显然没有.
我试图在sbt中的多项目构建中获得子项目的位置.但我只能获得根项目目录.
lazy val copyToResources = taskKey[Unit]("copies the assembly jar.")
private val rootLocation: File = file(".").getAbsoluteFile
private val subProjectLocation: File = file("sub_project").getAbsoluteFile.getParentFile
lazy val settings = Seq(copyToResources := {
val absPath = subProjectLocation.getAbsolutePath
println(s"rootLocation:$subProjectLocation $absPath, sub-proj-location: ${rootLocation.getAbsolutePath}")
})
Run Code Online (Sandbox Code Playgroud)
输出:
rootLocation:/home/user/projects/workarea/repo /home/vdinakaran/projects/workarea/repo, sub-proj-location: /home/vdinakaran/projects/workarea/repo
rootLocation:/home/user/projects/workarea/repo /home/vdinakaran/projects/workarea/repo, sub-proj-location: /home/vdinakaran/projects/workarea/repo
Run Code Online (Sandbox Code Playgroud)
目录结构:
repo
|-- sub_project
Run Code Online (Sandbox Code Playgroud)
作为解决方法,我使用rootLocation添加了sub_project文件夹.但为什么文件("sub_project")没有返回路径?