Scala 如何定义接受文件参数并返回文件的自定义SBT任务?
我正在从事一个Scala项目,该项目要求我计算使用Scala 如何定义接受文件参数并返回文件的自定义SBT任务?,scala,sbt,Scala,Sbt,我正在从事一个Scala项目,该项目要求我计算使用sbt assembly生成的jar文件的base64编码SHA-256哈希。我编写了一个简单的Scala方法来实现这一点: def computeCodeHash(file: File): File = { //..do some work and write the hash to a new file with a '.sha256' extension } 现在我需要创建一个SBT命令,我可以调用它来计算这个散
sbt assembly
生成的jar文件的base64编码SHA-256哈希。我编写了一个简单的Scala方法来实现这一点:
def computeCodeHash(file: File): File = {
//..do some work and write the hash to a new file with a '.sha256' extension
}
现在我需要创建一个SBT命令,我可以调用它来计算这个散列。我希望能够做到以下几点:
> codehash "target/scala-2.11/foo.jar"
并让该任务调用我的computeCodeHash
方法。对于额外的自动积分,我还想知道如何扩展构建,以便sbt assembly
插件创建的assembly
任务也运行我的computeCodeHash
方法
我试着通读有关输入任务、设置和解析器的文档,但我对SBT的知识有限,我无法理解如何完成看似相当基本的任务。我还试着阅读sbt汇编
源代码,但我对它一无所知
任何指点都将不胜感激。类似的东西?:
导入sbt.Keys_
进口sbt_
导入SBTAAssembly.AssemblyKeys_
对象构建扩展了sbt.Build{
私有def mkHash(路径文件:字符串):字符串={
println(s“在此处为:$pathToFile创建哈希”)
"??"
}
lazy val codehash=inputKey[选项[字符串]](“Mk哈希”)
val codehashTask=codehash:={
val s=streams.value
val args=sbt.complete.Parsers.spaceDelimited(“”)。已解析
args.headOption.map{path=>
s、 log.info(s“为:$path创建哈希”)
mkHash(路径)
}
}
lazy val root=Project(“sbt哈希任务”,文件(“.”)
.设置(
代码哈希任务,
(大会):={
val out=assembly.value
mkHash(out.getAbsolutePath)
出来
}
)
}
用法:
sbt
> codehash some/path.jar
> assembly //runs assembly and codehash
谢谢@ed,我有一些类似的东西,但不是很地道,我不知道如何将任务与
汇编集成。请注意,我确实在DefaultParsers中找到了一个fileParser,这很有用,因为它允许制表符完成知道参数是相对于基本目录的文件路径。