【发布时间】:2018-06-30 01:05:19
【问题描述】:
我正在开发一个通过sat-native-packager 生成 RPM 的 SBT 项目。我想要提取到 RPM 中的项目之一是使用 sat-pack 插件从单独项目发布的 ZIP 文件。此 ZIP 文件包含许多 JAR 文件,以及用于调用它们的多个脚本。
我的 RPM 项目的 build.sbt 中有以下内容:
libraryDependencies += ("com.mycompany" %% "aputils" % "1.0.0-SNAPSHOT").artifacts(Artifact("aputils", "zip", "zip"))
// Task to download and unpack the utils bundle
lazy val unpackUtilsTask = taskKey[Unit]("Download the utils bundle to the target directory")
unpackUtilsTask := {
val log = streams.value.log
val report: UpdateReport = (update in Rpm).value
val filter = artifactFilter(extension = "zip")
val matches: Seq[File] = report.matching(filter)
matches.foreach{ f =>
log.info(s"Filter match: ${f}")
IO.copyFile(f, target.value)
}
}
当我运行此任务时,它与 UpdateReport 中的任何条目都不匹配。没有打印任何内容,也没有文件复制到target/。如果我修改任务以打印UpdateReport 中的所有文件:
report.allFiles.foreach(f => log.info(s"All files: $f))
我看到了一些 JAR 文件,但没有看到我的 ZIP 文件。 JAR 文件结果是 ZIP 文件中包含的所有 JAR 文件。我不确定为什么要解压缩 ZIP,并且它的内容被列为这样的依赖项。如果我将依赖项标记为notTransitive,则包含的 JAR 不会在报告中列出,但 ZIP 仍然不包括在内。
此项目使用 SBT 0.13.15。我现在不希望将其更新到 1.x,但如果必须,我会这样做。
我最终需要解压缩target/ 下的ZIP 文件,这样我就可以定义一个或多个packageMapping 条目来将文件拉入RPM,但如果可以的话,通过sbt.IO 似乎很容易做到首先获取从我们的 Artifactory 服务器下载的原始 ZIP 文件的引用。
【问题讨论】: