是否可以在多项目sbt文件中从子项目引用主项目? 我正在编写一个自定义任务,我需要找到两个目录:
当然,每一个都可以在自己的项目中使用。但是我需要以相同的代码访问它们。 我该怎么办?
项目布局为:
some/dir/build.sbt
val masterRoot = baseDirectory.value.getAbsolutePath // this works
lazy val root = (project in file(".")).aggregate(subproject)
some/dir/subproject/build.sbt
lazy val someTask = TaskKey[String]("someTask")
someTask := {
val subprojectTarget = target.value.getAbsolutePath // this works
val masterRootBroken = baseDirectory.in(root).value.getAbsolutePath // root is not found
// I need access to subprojectTarget AND masterRoot here
}
或者,我可以在主项目的图形中将值设置到SettingKey中,然后在子项目中读取它吗?
答案 0 :(得分:0)
我认为有两种选择
第一个选择是您已经拥有的多文件项目结构
build.sbt
:
val sub = (project in file("sub"))
val root = (project in file("."))
注意:以上所有行都不是必需的。定义它们只是为了表示一些可能的附加逻辑,例如aggregate
。
还有sub/build.sbt
和内容
val root = (project in file("..")) //Note that ".." is used to refer to root project folder
val combinedPath = TaskKey[String]("combinedPath")
combinedPath := {
target.value.getAbsolutePath + baseDirectory.in(root).value.getAbsolutePath
}
第二个是将所有build.sbt
文件合并到一个包含内容的根项目中的build.sbt
val combinedPath = TaskKey[String]("combinedPath")
val sub = (project in file("sub"))
.settings(
combinedPath := {
target.value.getAbsolutePath + baseDirectory.in(root).value.getAbsolutePath
}
)
lazy val root = (project in file("."))
任务combinedPath
的定义是在settings
项目的sub
中完成的,它可以引用baseDirectory.in(root)
的{{1}}。