我正在研究一个通过sat-native-packager
生成RPM的SBT项目。我要拉入RPM的项目之一是ZIP文件,该文件是使用sat-pack
插件从单独的项目发布的。这个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,但这似乎很容易通过{{1 }},如果我能首先获得对从我们的Artifactory服务器下拉的原始ZIP文件的引用。
答案 0 :(得分:0)
几天后没有得到任何答复,但是我将发布更多经过反复试验后能够提出的答案。
通过检查UpdateReport
,我处在正确的轨道上,但是我没有在其中查看正确的数据。我需要深入查找以找到ModuleReport
,该文件将向我显示.zip文件在构建计算机上的下载位置。一旦有了该路径,就可以使用target/
将其解压缩到IO.unzip()
了。这是我的任务最终的外观:
libraryDependencies += ("com.mycompany" %% "aputils" % "1.0.0-SNAPSHOT").artifacts(Artifact("aputils", "zip", "zip"))
// Task to unzip the utils ZIP file to the target directory so we can define a package mapping
lazy val unpackUtilsTask = taskKey[Unit]("Download the utils bundle to the target directory")
unpackUtilsTask := {
val log = streams.value.log
val cReport: ConfigurationReport = (update in Compile).value.configuration("compile").get
cReport.modules.foreach{ mReport =>
if (mReport.module.name.startsWith("aputils")) {
mReport.artifacts.foreach{ case (art, f) =>
log.info(s"Unpacking aputils bundle: ${f.getAbsolutePath}")
IO.unzip(f, target.value)
}
}
}
}
packageBin in Rpm := ((packageBin in Rpm).dependsOn(unpackUtilsTask)).value
最后一行将任务附加到构建RPM的任务上,因此在构建RPM之前将其解压缩,我们可以定义packageMapping
来将.zip文件的内容放入生成的文件中。 RPM。