- 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のほうを直す?(どうやって?)
- その他?
- scalacheckのversion毎にcross buildしていて
7.2.29-scalacheck-1.13
と7.2.29-scalacheck-1.14
みたいなことしてるので - https://repo1.maven.org/maven2/org/scalaz/scalaz-scalacheck-binding_2.12/
- https://github.com/scalaz/scalaz/blob/15e3e34ead9be5f00b2f176e8374906f84dad218/build.sbt#L147-L154
- https://github.com/scalaz/scalaz/commit/9ca4b1537e657db2d4f3f5ca249dd8e5d8cb9941 ( sonatypeBundleDirectory 上書きで動いた。上書きしない状態で、一部がpublishされないことは確かめてない)