2016-11-23 84 views
3

我想在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」)沒有返回路徑?

回答

4

如果你定義子項目這樣

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

那麼你可以使用作用域baseDirectory設置得到它的路徑:

baseDirectory.in(subProject).value.getAbsolutePath 

還是在SBT控制檯:

> show subProject/baseDirectory 

關於你的代碼的問題(除了你在輸出中混合了根和子項目) t)是相對路徑的使用。在Paths SBT文件明確地說

相對應的文件只定義一個項目,在那裏他們將得到妥善解決的基本目錄時使用。

其他地方,文件應該是絕對的,或者從絕對基本文件構建。 baseDirectory設置根據範圍定義構建或項目的基礎目錄。

相關問題