SBT如何发布从运行命令

时间:2017-04-03 23:35:16

标签: scala sbt publish

我试图编译并运行在SBT中生成文件的scala代码(在这种情况下是swagger文件)。

以下sbt执行正常。构建并执行jar,执行创建的swagger.zip文件位于目标目录中。但是,我似乎无法将zip文件发布到我的神器仓库,就像我的标准jar文件一样。

对我失踪的事情有所了解吗?



    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 )


1 个答案:

答案 0 :(得分:-2)

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

您的案例完全符合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)

然后运行“sbt publish

工作演示

有关正常工作的演示,请参阅https://gist.github.com/RichardBradley/5384a5e0da2427df237f42fe512b30b8

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

请参阅https://stackoverflow.com/a/23416018/8261