2013-09-04 5 views
2

В моей сборке SBT я получаю зависимость от zip (ранее построенный с помощью плагина sbt-native-packager), опубликованный в моем локальном репо Ivy с классификатором bundle.Как найти путь зависимости zip?

Но мне нужен путь зависимостей в репозитории Ivy, чтобы разархивировать его (с помощью IO.unzip), поместить в него несколько файлов и переупаковать его с помощью sbt-native-packager.

Я использую метод artifacts(...), чтобы найти артефакт и добавить его как зависимость:

"foo" % "bar" % "1.0-SNAPSHOT" artifacts(Artifact("bar-bundle", "zip", "zip", "bundle")) 

Но после этого, я немного потерял ...

Я попытался отфильтровывать вне dependencyClasspath, чтобы найти его:

val bundleFile = taskKey[File]("bundle's path") 

val settings = Seq(bundleFile <<= dependencyClasspath map { _ filter (_.endsWith(".zip"))}) 

Проблемы: Я не могу найти зип зависимости в любом ... классов Что я делаю неправильно ?

Я использую sbt 0.13.

ответ

1

Почтовые файлы по умолчанию не находятся в пути к классам. Типы артефактов, которые включены, настраиваются classpathTypes. Вы можете добавить «молнию» к нему с:

classpathTypes += "zip" 

Он появится на dependencyClasspath.

Однако, если он действительно не должен идти по пути к классам, вы можете напрямую его вывести из отчета об обновлении.

bundleFile := { 
    val report: UpdateReport = update.value 
    val filter = artifactFilter(name = "bar-bundle", extension = "zip") 
    val all: Seq[File] = report.matching(filter) 
    all.headOption getOrElse error("Could not find bar-bundle") 
} 

Подробнее см. Документацию на UpdateReport.