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

2023-11-26

我正在尝试获取 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(使用前将#替换为@)

如何获取sbt多项目构建中的子项目路径 的相关文章

随机推荐