我正在尝试仅在test
任务的sbt中启用分叉,这不包括测试命令的休止符(test-only
,test:compile
等。)
起初我认为解决方案是:
fork in test := true
然后我在documentation上看到,这样做可以分配所有不是我想要的测试任务。
我还发现有Test
变量(大写第一个字母)。 test
和Test
之间有什么区别?
然后我又看到了另一个例子:
fork in (Test, run) := true
哪个sbt手册说它分叉test:run
和test: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;我不清楚前者。那么它们之间的区别是什么?
答案 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配置的编译任务使用的源文件(当您只编译测试文件时)。
projectX/test:compile::sources
转换为
sources in (Test,compile) in projectX
所以要回答你的问题。使用大写T进行测试是配置范围。与大写C类似的编译是配置范围。小写的编译,测试等是你的任务。
现在,sbt有很多默认范围。例如,如果您只输入sbt并键入compile
,它将实际执行Root项目的Compile配置下的编译任务。