我在Global&中定义了一个变量libDir。当我尝试在其中一个子项目中使用它(指定范围)时,它失败了:
[info]从/ Users / chichu / ws / tip / TestMain / project加载项目定义 对未定义设置的引用:
* / *:Streaming / *中的libDir:install(/Users/chinchu/ws/tip/TestMain/build.sbt:124) 你的意思是TestRoot / *:libDir?
这是来自build.sbt的片段:
===
def Streaming(name:String,dir:String, archiveName:String,main:String):Project = { ... ...
install := {
val jarName = assembly.value
sbt.IO.copyFile(jarName, (libDir in Global).value) // copy over the jar
}
}
.. ..
lazy val installDir = SettingKeyFile
libDir:= baseDirectory.value /" install / lib"
==
为什么它无法解决" libDir"即使我在Global"中指定" ?我还在TestRoot"中尝试过" libDir。 &安培;它报告"错误:未找到:值TestRoot"
由于 -C
答案 0 :(得分:2)
规范says,如果您定义如下设置:
libDir := baseDirectory.value / "install/lib"
它会将任务和配置范围设置为Global
,但项目范围将设置为当前项目(在您的情况下是根项目)。
当您将设置称为libDir in Global
时,您将配置范围设置为Global
,但仍然是您在当前版本(即某个项目)中尝试定义{{1}设置。
您应该像这样定义install
:
libDir
也将项目范围设置为libDir in Global := baseDirectory.value / "install/lib"
。
Global
或者,您可以为根项目提供一个显式ID,即在您的主lazy val installDir = settingKey[File]("ff")
lazy val install = taskKey[Unit]("prints install")
installDir in Global := baseDirectory.value / "install/lib"
val projectA = project.in(file("projectA")).settings(
install := {
val install = (installDir in Global).value
println(install)
}
)
val projectB = project
添加一行
build.sbt
然后在您的val root = Project("root", file("."))
任务中,参考该项目中的install
(Global
是项目名称)
root
(libDir in Global in root).value