Scala sbt获取根项目的生成文件夹
我想在我的SBT构建中包括一个外部项目,例如:Scala sbt获取根项目的生成文件夹,scala,sbt,Scala,Sbt,我想在我的SBT构建中包括一个外部项目,例如: lazy val leonProject = RootProject(uri("https://github.com/epfl-lara/leon.git")) 现在我有一个自定义任务,需要获取这个RootProject的一些文件 如何找到下载RootProject的路径 我尝试过的 这是不存在的 leonProject.baseDirectory // Does not exist. There is no such field. 我试图查看
lazy val leonProject = RootProject(uri("https://github.com/epfl-lara/leon.git"))
现在我有一个自定义任务,需要获取这个RootProject
的一些文件如何找到下载
RootProject
的路径
我尝试过的
这是不存在的
leonProject.baseDirectory // Does not exist. There is no such field.
我试图查看sbt的文档,看看我们可以用RootProject
及其超类ProjectReference
做些什么,但我什么也找不到(我甚至编写了一个脚本,从他们的网站上查找相关信息)
我试着模仿的行为,即以下和。但是如果我运行sbt footest
,它只返回“#footest”,并且从不执行内部命令event。它仅列出激活此命令的项目
lazy val root = (project in file(".")).settings(
Keys.commands <+= ("footest")((str: String) => {
println("#"+str)
lazy val key = Keys.baseDirectory in ThisBuild
def structure(state: State): BuildStructure = Project.extract(state).structure
Command.single("footest")((state, args) => {
println("executed")
key.get(structure(state).data) match {
case Some(a) => println("The project file "+a)
case None => "Undefined setting '%s'!"
}
state
}
)
}
))
// and call sbt foobar.
您可以从加载的项目结构中获取它
import sbt._
import Keys._
object MyBuild extends Build {
val leonLocalBase = SettingKey[File]("leonLocalBase", "local base for leon project")
lazy val root = Project("root", file("."))
.dependsOn(leonProject)
.settings(
leonLocalBase := {
val build = loadedBuild.value
val leonUnit = build.units(leonProject.build)
leonUnit.localBase
}
)
lazy val leonProject = RootProject(uri("https://github.com/epfl-lara/leon.git"))
}
非常感谢你!这对我来说很有效,我必须在外部范围而不是设置中定义
leonLocalBase:={…}
。参考我的答案
import sbt._
import Keys._
object MyBuild extends Build {
val leonLocalBase = SettingKey[File]("leonLocalBase", "local base for leon project")
lazy val root = Project("root", file("."))
.dependsOn(leonProject)
.settings(
leonLocalBase := {
val build = loadedBuild.value
val leonUnit = build.units(leonProject.build)
leonUnit.localBase
}
)
lazy val leonProject = RootProject(uri("https://github.com/epfl-lara/leon.git"))
}