如何在sbt多项目构建中获取子项目路径

时间:2016-11-23 14:13:27

标签: scala sbt

我试图在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")没有返回路径?

1 个答案:

答案 0 :(得分:7)

如果您像这样定义子项目

lazy val subProject = project in file("sub_project") // ...

然后您可以使用范围baseDirectory设置获取其路径:

baseDirectory.in(subProject).value.getAbsolutePath

或者在sbt控制台中:

> show subProject/baseDirectory

关于您的代码问题(除了您在输出中混合了根和子项目之外)是相对路径的使用。关于Paths的Sbt文档明确说明了

  

在定义项目的基本目录时,相对文件应才能正确解析。

     

在其他地方,文件应该是绝对的,或者是从绝对基础文件构建的。 baseDirectory设置根据范围定义构建或项目的基本目录。