sbt 最简单的带输入任务 inputTask

在 sbt 中我们可以定义 settingKey, taskKey 和 inputKey. inputKey 接收输入的任务更具灵活性,虽然在 sbt 中 taskKey 和  inputKey 数量比例为 25:1,但仍然不可忽视了 inputKey 的贡献。

起初在阅读 sbt 关于 inputKey 的资料时,一不小心就被带入到 Parser 上去了。其实还不如开门见山,先跳过 Parser 部份,示范 inputKey 任务中直接处理用户的原生输入。

这里有两个最简单的 sbt inputKey 的示例

一. 命令后非空格起全部输入当作一个字符串

trimmed() 方法能去除了两边的空格,如果是 token(any.* map(_.mkString)).parse 则两边空格都会算上,在 demo1 abc  的 abc 两边的空格也都会算在输入参数里

> demo1 abc "abc"
abc "abc"


sbt  的  input task  参数居然默认是紧接着命令开始的,如上面如果输入是 demo1xxx, demo1 任务接收到的参数是 xxx. 如果同时也定义了另一个任务是 demo1x, 那么输入 demo1xx 就会执行 demo1x 任务,参数是 xx. 从后往前进行匹配任务名。这个还有点奇怪,因为我以前任何时候都是自然的把命令与参数用空格分开,它却可以把命令与参数写在一起。

 


二. 像调用 main 方法一样传入参数

我们知道在调用 Java 的主方法时参数可以用空格或 tab 分开,最络作为数组传递到主方法,单个参数若有空格或tab可以用双引号括起来。

> demo2 abc "b cd" 'cde'
abc
b cd
'cde'

从前面我们看到在使用参数之前调用了 Parser 的 parsed 得到合适类型的输入。现在可以开始理解 Parser 的功能了,它其实就像是 FormBean 那样的 Converter, 就是针对输入的字符串,你可以用 Parser[T] 把它转换为任何类型,如字符串到文件类型, 或 Boolean 型等等。sbt 内置了一引起 Parser, 见 DefaultParsers,我们可以在此基础或完全自定义 Parser。

参考: http://www.scala-sbt.org/0.13/docs/Input-Tasks.html

本文链接 https://yanbin.blog/sbt-simplest-inputtask-sample/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments