Как ZIP файлы с префиксом папки в SBT
Чтобы создать дистрибутивный ZIP с помощью простого инструмента сборки, можно просто сделать
def distPath = (
((outputPath ##) / defaultJarName) +++
mainDependencies.scalaJars
)
lazy val dist = zipTask(distPath, "dist", "distribution.zip") dependsOn (`package`) describedAs("Zips up the project.")
Это добавляет файлы JAR в корень ZIP. Как добавить банки в подпапку lib
в ZIP?
1 ответ:
Для sbt 0.7.x:
Насколько мне известно, по умолчанию ничего не реализовано. Однако вы можете использовать файлообменники SBT.Попробуйте поиграть со следующим примером, который копирует вашу банку артефактов в каталог tmp, закрывает каталог и удаляет его. Его следует прямо распространить на зависимые библиотеки.
class project(info: ProjectInfo) extends DefaultProject(info) { def distPath = { ((outputPath ##) / defaultJarName) +++ mainDependencies.scalaJars } private def str2path(str: String): Path = str lazy val dist = task { FileUtilities.copyFile((outputPath ##) / defaultJarName, "tmp" / "lib" / defaultJarName, log) FileUtilities.zip(List(str2path("tmp")), "dist.zip", true, log) FileUtilities.clean("tmp", log) None } }
Выше использовались следующие функции из
FileUtilities
:Их заявления должны быть понятны сами себе.def zip(sources: Iterable[Path], outputZip: Path, recursive: Boolean, log: Logger) def copyFile(sourceFile: Path, targetFile: Path, log: Logger): Option[String] def clean(file: Path, log: Logger): Option[String]