我正在开发一个 SBT 项目,该项目通过sat-native-packager. 我想要拉入 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,但如果必须,我会这样做。
我最终需要解压缩 ZIP 文件,target/这样我就可以定义一个或多个packageMapping条目以将文件拉入 RPM,但这似乎很容易通过 完成sbt.IO,如果我可以首先获取对原始 ZIP 文件的引用,即从我们的 Artifactory 服务器下拉。