我正在尝试获取 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}")
})
Output:
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”)没有返回路径?
如果你像这样定义你的子项目
lazy val subProject = project in file("sub_project") // ...
然后你可以使用作用域获取它的路径baseDirectory
环境:
(过时的语法,pre sbt 1)
baseDirectory.in(subProject).value.getAbsolutePath
(新的统一语法)
(subProject / baseDirectory).value.getAbsolutePath
在 sbt 控制台中:
> show subProject/baseDirectory
关于代码的问题(除了在输出中混淆了根项目和子项目之外)是相对路径的使用。 SBT 文档Paths明确地说
相关文件应该only在定义项目的基目录时使用,它们将在其中正确解析。
在其他地方,文件应该是绝对的或从绝对的基本文件构建的。这baseDirectory
设置根据范围定义构建或项目的基目录。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)