Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala sbt获取根项目的生成文件夹_Scala_Sbt - Fatal编程技术网

Scala 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. 我试图查看

我想在我的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.
我试图查看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"))
}