首页 > 解决方案 > 如何访问像 assemblyJarName 这样的 sbt 变量的值?

问题描述

在 1.1.5 版中。
例如,如何在 build.sbt 中打印它?
println(assemblyJarName.value) 不会工作,原来是一个错误:
[error] Did you mean assemblyPackageDependency / assemblyJarName ?

标签: sbtsbt-assembly

解决方案


如果像这样assemblyJarName定义build.sbt

assemblyJarName in assembly := "hello.jar"

然后尝试在如下assembly调用时提供明确的任务范围value

println((assemblyJarName in assembly).value)

这是必需的,因为assemblyJarName设置的范围是一个我们可以看到如果我们执行的任务inspect assemblyJarName

inspect assemblyJarName
[info] No entry for key.
[info] Description:
[info]  name of the fat jar
[info] Delegates:
[info]  assemblyJarName
[info]  ThisBuild / assemblyJarName
[info]  Global / assemblyJarName
[info] Related:
[info]  assembly / assemblyJarName
[info]  assemblyPackageDependency / assemblyJarName
[info]  assemblyPackageScala / assemblyJarName

当我们只提供裸设置时,它的默认范围就像这样

inspect projFoo    /     Zero         /    Zero    /   assemblyJarName
           |              |                 |
        project      configuraition        task
   

assemblyJarName不存在于该范围内

inspect assemblyJarName
[info] No entry for key.

但是在Related部分我们看到

[info] Related:
[info]  assembly / assemblyJarName
[info]  assemblyPackageDependency / assemblyJarName
[info]  assemblyPackageScala / assemblyJarName

这告诉我们assemblyJarName设置范围为以下三个任务

assembly
assemblyPackageDependency
assemblyPackageScala

推荐阅读