我试图在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}")
})
输出:
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
目录结构:
repo
|-- sub_project
作为一种解决方法,我使用rootLocation添加了sub_project文件夹。但是为什么文件(" sub_project")没有返回路径?
答案 0 :(得分:7)
如果您像这样定义子项目
lazy val subProject = project in file("sub_project") // ...
然后您可以使用范围baseDirectory
设置获取其路径:
baseDirectory.in(subProject).value.getAbsolutePath
或者在sbt控制台中:
> show subProject/baseDirectory
关于您的代码问题(除了您在输出中混合了根和子项目之外)是相对路径的使用。关于Paths的Sbt文档明确说明了
在定义项目的基本目录时,相对文件应仅才能正确解析。
在其他地方,文件应该是绝对的,或者是从绝对基础文件构建的。
baseDirectory
设置根据范围定义构建或项目的基本目录。