gpt4 book ai didi

scala - SBT如何发布从运行命令生成的工件

转载 作者:行者123 更新时间:2023-12-01 22:35:41 25 4
gpt4 key购买 nike

我正在尝试编译并运行 scala 代码,该代码会在 SBT 中生成一个文件(在本例中是一个 swagger 文件)。

下面的 sbt 执行得很好。 jar 已构建并执行,执行创建的 swagger.zip 文件位于目标目录中。但是,我似乎无法像标准 jar 文件那样将 zip 文件发布到我的工件存储库。

知道我缺少什么吗?



publishArtifact in (Compile, packageBin) := false
publishArtifact in run := true

val myZipTask = taskKey[File]("swagger-zip")

myZipTask := {
file("swagger.zip")
}

addArtifact(Artifact("swagger", "zip", "zip"), myZipTask )


最佳答案

run 命令不会触发任何发布任务,因为这不是它的用途。我认为您已尝试在使用“publishArtifact in run := true”调用 run 时打开发布,但该代码不足以实现这一目标;您需要将许多其他任务附加到该命令。无论如何,这都不是您想要的。

您的案例完全符合 addArtifact 帮助程序的预期用法(请参阅 the docsthe code )

由于您需要运行代码来生成工件,因此您应该将该代码作为 Task 参数提供给 addArtifact 帮助器,即

val myZipTask = taskKey[File]("return the swagger-zip file")
val runZipCodeTask = taskKey[Unit]("run the swagger-zip code")

// See http://www.scala-sbt.org/0.13.2/docs/faq.html, “How can I create a custom run task, in addition to run?”
// and https://stackoverflow.com/questions/23409993/defining-sbt-task-that-invokes-method-from-project-code
fullRunTask(runZipCodeTask, Compile, "ZipGeneratorMainClass")

myZipTask := {
runZipCodeTask.value
file("target/swagger/swagger.zip")
}

addArtifact(Artifact("swagger", "zip", "zip"), myZipTask)

然后运行“sbtpublish

工作演示

参见https://gist.github.com/RichardBradley/5384a5e0da2427df237f42fe512b30b8一个工作演示。

有关范围的注意事项 - 考虑在元项目而不是主项目中生成此文件

参见https://stackoverflow.com/a/23416018/8261

关于scala - SBT如何发布从运行命令生成的工件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43195989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com