Skip to content

Instantly share code, notes, and snippets.

@xuwei-k
Last active October 14, 2019 07:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xuwei-k/10e75a3f93e4c087b8912842eb5ca65d to your computer and use it in GitHub Desktop.
Save xuwei-k/10e75a3f93e4c087b8912842eb5ca65d to your computer and use it in GitHub Desktop.
sbt-sonatypeのsonatypeBundleDirectoryを微妙に修正するべき?という話

前提や問題点の説明

  • sbt-sonatypeのversion 3.8時点の話
  • 最近のsbt-sonatypeは、一旦全部ローカルの特定のディレクトリにjarやpomをpublishして、それをまとめてuploadするという、bundle releaseという方式が導入された
  • sonatypeBundleDirectoryはその際のディレクトリのためのSetting Key
  • "まとめてupload" なので、もちろん基本的には、一つのディレクトリに全部一旦publishして、1回だけuploadするのが通常の使い方として想定されているはず
  • (なぜか同名の未使用のTaskKeyが定義されているが?)sonatypeBundleReleaseはcommandとして定義されている https://github.com/xerial/sbt-sonatype/blob/3.8/src/main/scala/xerial/sbt/Sonatype.scala#L144-L145
  • SettingKeyやTaskKeyは、sub project毎に違う値や動作を持てる。一方Commandは、(単純に言えば)指定されたものを順次sbtのconsoleから実行するイメージに近い
  • versionもSettingKey
  • つまり、sonatypeBundleDirectoryの値は、versionを使って定義されているが、sub project毎にversionが違えば、sonatypeBundleDirectoryの値も異なることになるはず
  • すると "一つのディレクトリに全部一旦publishして" とならない
  • 一方、リリースする際にsonatypeBundleDirectoryの値は、commandを実行したprojectかrootのものを使うだけのはず?(試してないので若干自信ない) https://github.com/xerial/sbt-sonatype/blob/3.8/src/main/scala/xerial/sbt/Sonatype.scala#L150
  • すると、もしsub project毎にversionが違うと、一部のsub projectのものはpublishされないことになるかも?

解決案

  • 単なる version.value ではなく (ThisBuild / version).value にしてしまう(これやって不都合ないなら、たぶんこれがいい?)
    sonatypeBundleDirectory := {
-      (ThisBuild / baseDirectory).value / "target" / "sonatype-staging" / s"${version.value}"
+      (ThisBuild / baseDirectory).value / "target" / "sonatype-staging" / s"${(ThisBuild / version).value}"
    },
  • READMEかどこかに説明だけ書く
  • イレギュラーなパターンだし、何もしない
  • sonatypeBundleReleaseのほうを直す?(どうやって?)
  • その他?

そもそもsub project毎にversion違うパターンって何?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment