如何在SBT中发布到多个存储库?

nau*_*ine 13 scala sbt

我正在升级Nexus版本.作为流程的一部分,我设置了一个新的Nexus实例,它将与旧的Nexus实例并行运行.

在迁移到新实例时,我想在拔出旧实例上的插件之前彻底测试和审查新实例.这要求我以publish这样的方式临时修改工作流,即sbt将工件发布到Nexus实例.

我非常怀疑以下代码实际上是否有效:

    publishTo <<= (version) {
       version: String =>
       if (version.trim.endsWith("SNAPSHOT")) Some("snapshots" at "http://maven1.dev.net:8081/nexus/content/" + "repositories/snapshots/")
       else Some("releases" at "http://maven1.dev.net:8081/nexus/content/" + "repositories/releases/")
    },
    credentials += Credentials("Sonatype Nexus Repository Manager", "maven1.dev.net", "release-eng", "release"),

    publishTo <<= (version) {
       version: String =>
       if (version.trim.endsWith("SNAPSHOT")) Some("snapshots" at "http://maven2.dev.net:8081/nexus/content/" + "repositories/snapshots/")
       else Some("releases" at "http://maven2.dev.net:8081/nexus/content/" + "repositories/releases/")
    },
    credentials += Credentials("Sonatype Nexus Repository Manager", "maven2.dev.net", "release-eng", "release"),
Run Code Online (Sandbox Code Playgroud)

我也试过调查一个名为sbt-multi-publish的插件,但我也无法编译和使用它.

Jac*_*ski 4

使用命令以及如何更改单个 sbt 命令内的版本设置?我可以定义一个新命令 -在执行原始任务之前myPublishTo更改设置:publishTopublish

def myPublishTo = Command.command("myPublishTo") { state =>
  val extracted = Project.extract(state)
  Project.runTask(
    publish in Compile,
    extracted.append(List(publishTo := Some(Resolver.file("file", target.value / "xxx"))), state),
    true
  )
  Project.runTask(
    publish in Compile,
    extracted.append(List(publishTo := Some(Resolver.file("file", target.value / "yyy"))), state),
    true
  )
  state
}

commands += myPublishTo
Run Code Online (Sandbox Code Playgroud)

这样,就可以myPublishTo像任何其他命令/任务一样执行。

您还可以定义几个aliases-和- pxxx,其中将使用 执行一系列命令。pyyypxybuild.sbt;

addCommandAlias("pxxx", "; set publishTo := Some(Resolver.file(\"file\", target.value / \"xxx\")) ; publish") ++
addCommandAlias("pyyy", "; set publishTo := Some(Resolver.file(\"file\", target.value / \"yyy\")) ; publish") ++
addCommandAlias("pxy", "; pxxx ; pyyy")
Run Code Online (Sandbox Code Playgroud)

在 sbt 控制台中,您可以像执行任何其他命令/任务一样执行它们。

[sbt-0-13-1]> alias
    pxxx = ; set publishTo := Some(Resolver.file("file", target.value / "xxx")) ; publish
    pyyy = ; set publishTo := Some(Resolver.file("file", target.value / "yyy")) ; publish
    pxy = ; pxxx ; pyyy
[sbt-0-13-1]> pxy
[info] Defining *:publishTo
[info] The new value will be used by *:otherResolvers, *:publishConfiguration
[info] Reapplying settings...
[info] Set current project to sbt-0-13-1 (in build file:/Users/jacek/sandbox/so/sbt-0.13.1/)
...
[info]  published sbt-0-13-1_2.10 to /Users/jacek/sandbox/so/sbt-0.13.1/target/xxx/default/sbt-0-13-1_2.10/0.1-SNAPSHOT/sbt-0-13-1_2.10-0.1-SNAPSHOT-javadoc.jar
[success] Total time: 1 s, completed Jan 9, 2014 11:20:48 PM
[info] Defining *:publishTo
[info] The new value will be used by *:otherResolvers, *:publishConfiguration
[info] Reapplying settings...
...
[info]  published sbt-0-13-1_2.10 to /Users/jacek/sandbox/so/sbt-0.13.1/target/yyy/default/sbt-0-13-1_2.10/0.1-SNAPSHOT/sbt-0-13-1_2.10-0.1-SNAPSHOT-javadoc.jar
[success] Total time: 0 s, completed Jan 9, 2014 11:20:49 PM
Run Code Online (Sandbox Code Playgroud)