タイトル長くなりすぎるからやめましたが、本当に話したいこと、話すことは、
「サブプロジェクト毎にクロスビルドするScalaのversionが異なる場合」
だけではなく
「さらにその中にsbt pluginがあってscripted testもしたい場合」
です・・・つらい・・・。
"つらい"、というか、それほど重大な問題でもないのだけど、微妙にかゆいところに手が届かない感じでモヤモヤする・・・
以前こんな会話して
@seratch_ja sbt plugin除いた、scala2.11でもビルド可能なプロジェクトのみをaggregateしたもうひとつ別のroot作って、そこで++ 2.11.0-RC1ですかねたぶん。それがbestな方法なのかは自信ないですけど
あとで sbt plugin を含むマルチプロジェクトはどうすべきなのか調べないと.. 今まで結局シェルスクリプトで泥臭く対応してきていたので、どうするのがスマートなのかわかってない。
@seratch_ja 自分がちょっと考えても、それやってるプロジェクトほぼないので、このまま泥臭くやるか、さっきいった方法 URL 試してもらうかですかね。もしくはsbtのMLで聞いてみるか @eed3si9n_ja さんに聞いてみるか
2014-03-06 22:35:48 via web to @seratch_ja
@xuwei_k @seratch_ja scalaxb は sbt plugin あるけどプロジェクト2つなので手作業。sbt-release で表現できればベストだけど、無理なら ScopeFilter で集約する独自タスクとか URL
2014-03-07 00:29:39 via YoruFukurou to @xuwei_k
結局、これ書いてる時点でのscalikejdbcは、自分が思いついた方式(Scala2.11でビルドできるサブプロジェクトのみを集めたrootプロジェクトを別につくる)でやってます。
さて、それはいいんですが、scalikejdbcはsbt pluginがあるので、当然ちゃんとテストかくならsbtのscripted test http://eed3si9n.com/ja/testing-sbt-plugins でテスト書きたいわけです。しかし、scripted testをするには、事前にまずpublish localする必要があります。
そして、どのサブプロジェクトをpublish localするのかは、自分で考えなければいけません(scripted test実行時になってみないと、必要な依存ライブラリなんてわからないので。sbt側に全部おまかせするのはたぶん不可能)
あと、ちゃんとテストするなら
「scripted testするsbt plugin自体は現状の最新安定版であるsbt0.13.x系、つまりはScala2.10.xでのみビルドすればいい」
ですが、
「scripted test内で使うライブラリのバージョンは、できればScala2.10.xと2.11.xと両方やるべき」
ですよね?
だいぶ話がややこしいけれど、ついてきていますか?
さて、つまりscalikejdbcでのscripted testは以下の様な手順になります
- Scala2.11用のrootでpublish local (2.10用のpublich localが先でもどっちでもいい)
- Scala2.10用のrootでpublish local
- scripted test実行
これでできるはずです。
それで、ここで話が前後するというか、飛びますが
「Scala2.11用のrootを作る」
方法が、2通りあることに気づきました。
- 明示的に全部列挙
- projectsというメソッドで全部取得してきて、必要ないもの(Scala2.11でビルドできないもの、と2.11用のroot自身)をfilterする
なんだかどっちもどっちな感ありますね。ただ、前者の「明示的に全部列挙」の方法でやってたお陰で(?)、このコミット
https://github.com/scalikejdbc/scalikejdbc/commit/41125cbfdff02
のときに、本当はaggregateの部分に追加すべきだったのを、誰も気づかなかったですね・・・。
https://github.com/scalikejdbc/scalikejdbc/issues/240#issuecomment-41916945
そのときはscripted testがあったわけでもないので、エラーにならなかったし。
気づくの遅れたといっても、それほど重大な問題でもないですが。
なにが言いたいのかよくわからない感じになってきましたが、sbt-release pluginとかでもsbt本体でもなんでもいいけど、もっとこういった複雑なビルドの場合に、少しでも今よりわかりやすく楽に書ける仕組みを、どうにか作れないかな(誰か作ってくれないかな)・・・と思っただけです。
互換性など色々気にして細かいことを頑張ろうとすればするほど、ライブラリ作者は技術的に面白いことだけではなく、こういった地味な努力してビルドファイル頑張って書いたりしないといけないのが現状ですね