我试图编译并运行在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 )
答案 0 :(得分:-2)
run
命令不会触发任何发布任务,因为这不是它的用途。我认为您在使用“run
”调用publishArtifact in run := true
时尝试启用发布,但该代码不足以实现此目的;你需要将许多其他Tasks
附加到该命令。这不是你想要的。
您的案例完全符合addArtifact
帮助程序的预期用途(请参阅the docs和the 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。