需要解释有关SBT在build.sbt中的关键变量

时间:2016-08-12 21:55:24

标签: scala sbt

我正在尝试仅在test任务的sbt中启用分叉,这不包括测试命令的休止符(test-onlytest:compile等。)

起初我认为解决方案是:

fork in test := true

然后我在documentation上看到,这样做可以分配所有不是我想要的测试任务。

我还发现有Test变量(大写第一个字母)。 testTest之间有什么区别?

然后我又看到了另一个例子:

fork in (Test, run) := true

哪个sbt手册说它分叉test:runtest:runMain:。起初我以为(Test, run)表示test:run,但是看到下面的另一个例子,似乎意思不是那样:

// sets the working directory for `run` and `runMain` only
baseDirectory in (Compile,run) := file("/path/to/working/directory/")

所以有大写第一个字母的变量(例如Test,Compile,Runtime)和带小写首字母的变量(例如test,testOnly,compile,console,run),后者似乎对应于sbt命令,但是我&# 39;我不清楚前者。那么它们之间的区别是什么?

1 个答案:

答案 0 :(得分:2)

通用背景

sbt为其所有变量(键)都有三个示波器轴(将其视为3D空间)。或者,您可以将其视为3个疲惫的命名空间。

1)项目,2)配置,3)任务

来自sbt interactive:

<project-id>/config:intask::key

所以你可以说从项目X(D-1)和配置编译(D-2)执行运行任务(D-3)。这将执行项目X的编译(在main / src文件夹下)代码中找到的main函数。

sbt> projectX/compile:run

类似地,您可以说在项目X的测试配置中执行run。现在将执行test / src文件夹下的main方法(假设您已经定义了一个)。

sbt> projectX/test:run

现在,任务也有密钥(内部配置变量)。例如:

sbt> show projectX/compile:compile::sources

这将显示Project-X的Compile配置的编译任务使用的源文件(当您只编译代码而不是测试时)。

sbt> show projectX/test:compile::sources

这将显示Project-X的Test配置的编译任务使用的源文件(当您只编译测试文件时)。

在SBT DSL中命名

当您在其DSL(内部.sbt文件)中编写以及通过sbt cli以交互方式执行任务时,sbt对命名任务和范围有不同的约定。

projectX/test:compile::sources

转换为

sources in (Test,compile) in projectX

所以要回答你的问题。使用大写T进行测试是配置范围。与大写C类似的编译是配置范围。小写的编译,测试等是你的任务。

现在,sbt有很多默认范围。例如,如果您只输入sbt并键入compile,它将实际执行Root项目的Compile配置下的编译任务。