我试图在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")没有返回路径?
如果您像这样定义子项目
lazy val subProject = project in file("sub_project") // ...
Run Code Online (Sandbox Code Playgroud)
然后你可以使用范围baseDirectory
设置获取其路径:
baseDirectory.in(subProject).value.getAbsolutePath
Run Code Online (Sandbox Code Playgroud)
或者在sbt控制台中:
> show subProject/baseDirectory
Run Code Online (Sandbox Code Playgroud)
关于代码的问题(除了你在输出中混合了根和子项目之外)是相对路径的使用.关于Paths的 Sbt文档明确说明
只有在定义项目的基本目录时才应使用相关文件,这些目录将在适当的情况下得到解决.
在其他地方,文件应该是绝对的,或者从绝对基础文件构建.该
baseDirectory
设置根据范围定义构建或项目的基本目录.
归档时间: |
|
查看次数: |
4084 次 |
最近记录: |