首页 > 解决方案 > mill 中指向 build.sc 文件所在目录的首选方法是什么?

问题描述

mill 中指向build.sc文件所在目录的首选方法是什么?

在磨机文档os.pwd中使用例如here,但如果可以从其他地方启动/运行磨机,则os.pwd指向不正确的位置。

import mill._, mill.modules.Jvm

def sourceRoot = T.sources { os.pwd / "src" }

def resourceRoot = T.sources { os.pwd / "resources" }

标签: scalabuild-toolsmill

解决方案


每个已定义模块的根位置都在 中定义def millSourcePath: os.Path,这是访问模块路径的首选方式。

例子:

import mill._, mill.scalalib._

object mymodule extends JavaModule {
  def sources = T.sources(millSourcePath / "src")
}
$ mill show __.sources
No mill version specified.
You should provide a version via '.mill-version' file or --mill-version option.
Using mill version 0.9.9
Compiling /tmp/stackoverflow/build.sc
[1/1] show 
[1/1] show > [1/1] mymodule.sources 
[
    "ref:c984eca8:/tmp/stackoverflow/mymodule/src"
]

如果您需要访问项目本身的路径,请注意,它mill.define.Module本身就是一个,您可以通过变量访问它build。因此,可以通过 访问项目目录build.millSourcePath

例子:

import mill._, mill.scalalib._

val baseDir = build.millSourcePath

object mymodule extends JavaModule {
  def sources = T.sources {
    super.sources() ++ Seq(PathRef(baseDir / "src"))
  }
}
$ mill show __.sources
No mill version specified.
You should provide a version via '.mill-version' file or --mill-version option.
Using mill version 0.9.9
Compiling /tmp/stackoverflow/build.sc
[1/1] show 
[1/1] show > [2/2] mymodule.sources 
[
    "ref:c984eca8:/tmp/stackoverflow/mymodule/src",
    "ref:c984eca8:/tmp/stackoverflow/src"
]

推荐阅读