2013-02-21 45 views
2

我想創建一個依賴另一個任務並將jar文件作爲輸出的任務(例如package-src),然後在某處提取生成的jar?SBT任務提取由package-src在某處創建的jar

注意:我對用於執行提取的庫/方法不感興趣,只關心如何定義調用此類庫或方法的任務。

回答

3

相關文件頁面爲TasksTaskInputs。爲了解壓縮,你可以使用sbt.IO.unzip(...)

首先,我們需要定義任務的密鑰(在.scala構建定義中)。該任務將返回一組解壓縮文件。

val unzipPackage = TaskKey[Set[File]]("unzip-package", "unzips the JAR generated by package-src") 

然後,我們添加一個設置像這樣的:

unzipPackage <<= (packageSrc, target in unzipPackage, streams) map { (zipFile, dir, out) => 
    IO createDirectory dir 
    val unzippedFiles = IO unzip (zipFile, dir, AllPassFilter) 
    out.log.info("Unzipped %d files of %s to %s" format (unzippedFiles size, zipFile, dir)) 
    unzippedFiles 
} 

這讓我們定義輸出目錄的設置,也:

target in unzipPackage <<= target/"unzippedPackage" 

希望這有助於。

+0

謝謝,當我回家時我會試試這個。只是一個簡單的問題,元組中的流鍵是什麼?另外,如果我真的只需要packageSrc作爲依賴項,可以直接調用packageSrc TaskKey上的map函數嗎? – pgraham 2013-02-21 22:06:55

+0

nm第二個問題,我只是看了看手冊,看到我可以:) – pgraham 2013-02-21 22:17:55

+1

'streams'鍵只是爲了記錄;它在功能塊內部被稱爲「out」,僅用於「out.log.info」,即登錄INFO級別。這與原始問題並不相關。我只是想我會包括它來展示如何連接到其他常用的東西。 :) – 2013-02-21 22:37:57