【问题标题】:how to get the sub project path in sbt multi project build如何在 sbt 多项目构建中获取子项目路径
【发布时间】:2017-04-07 14:23:21
【问题描述】:

我正在尝试在 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 文件夹。但是为什么 file("sub_project") 没有返回路径呢?

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    如果你这样定义你的子项目

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

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

    baseDirectory.in(subProject).value.getAbsolutePath
    

    或者在 sbt 控制台中:

    > show subProject/baseDirectory
    

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

    在定义项目的基目录时应使用相关文件,以便正确解析它们。

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

    【讨论】:

      猜你喜欢
      • 2017-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-11
      • 2021-05-28
      • 2018-04-10
      • 2014-11-20
      • 2016-08-24
      相关资源
      最近更新 更多