2014-01-08 5 views
13

Nexusバージョンのアップグレード中です。このプロセスの一環として、古いNexusインスタンスと並行して動作する新しいNexusインスタンスを設定しました。SBTの複数のリポジトリに公開するには?

新しいインスタンスに移行する際に、古いインスタンスのプラグをプルする前に、新しいインスタンスを完全にテストして検証したいと考えています。このため、ワークフローを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"), 

私もsbt-multi-publish呼ばれるプラグインを検討していますが、私はどちらか、それをコンパイルして使用することができませんでしみました。 、これにより

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 

他のコマンド/タスクとしてmyPublishToを実行します。元publishタスクを実行する前にpublishTo設定を変更する - myPublishTo -

+1

あなたはsbt-multi-publishを見ると正しくなっています。あなたはそれを使用しようとしたときに遭遇した問題を反映するために質問を更新できますか? (build.sbt、project/*。sbt、project/*。scalaの内容を提供してください) – Jean

答えて

3

CommandsHow to change a version setting inside a single sbt command?で、私は、新しいコマンドを定義することができます。

またalias ESのカップル定義できます - pxxxpyyypxyからbuild.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") 

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 
0

これは古い質問ですが、問題は解決しません。私はsbt-multi-publishを復活させようとしましたが、これは本当に古いです(sbt-0.12)。扱いにくいsbtの内部構造を使います。だから別のアプローチをとり、新しいプラグインを書きました:sbt-publish-more
オンザフライの設定変更や他の回答のようなカスタムコマンドは含まれません。

あなたは、あなたが(例として、あなたのコードを取る)に公開したいだけの設定リゾルバをプラグインを追加した後:

publishResolvers := { 
    val suffix = if (isSnapshot.value) "shapshots" else "releases" 
    Seq(
    s"Maven1 ${suffix}" at s"http://maven1.dev.net:8081/nexus/content/repositories/${suffix}/", 
    s"Maven2 ${suffix}" at s"http://maven2.dev.net:8081/nexus/content/repositories/${suffix}/" 
) 
} 

そしてpublishAllタスクを呼び出し、それがに両方のリポジトリを公開します。 異なる設定で異なるリポジトリに公開することもできます。詳細については、usage docsを参照してください。