Giter8 0.12.0

giter8.version

Giter8 0.12.0 に giter8-launcher という小さなアプリを追加した。このアプリの目的は Giter8 テンプレートの振る舞いを予測可能にすることにある。現状だと、テンプレート作者が Giter8 バージョン X を想定してテンプレートを作ったとしてもユーザー側は "sbt new" に同梱される別な Giter8 バージョン Y を使って実行されている。

sbt の良いアイディアの一つにユーザーがどのバージョンの sbt スクリプトをインストールしていてもコアの sbt バージョンはビルド作者が project/build.properties ファイルを使って指定できるというものがある。これによって「自分のマシンでしか動作しない」問題が大幅に改善される。giter8-launcher は sbt における sbt-launcher に同様のものだ。giter8-launcher はテンプレートのクローンして、project/build.properties ファイルを読み込んで、テンプレートのレンダリングに用いる実際の Giter8 バージョンを決定する。

VirtualAxis を用いた並列クロスビルド

sbt-projectmatrix は sbt のクロスビルドを改善するために、僕が実験として作っているプラグインで、本稿は前篇に続く第2弾だ。0.4.0 をリリースしたのでここで紹介する。

  • sbt-projectmatrix を使うことで複数の Scala バージョンや JVM/JS/Native クロスプラットフォームの並列ビルドを行うことができる。
  • VirtualAxis は、Scala-Java 間の依存やカスタムのクロスライブラリといったより柔軟なマトリックス間依存を可能とする。

Pamflet 0.8.2

Pamflet は短い文書、特にオープンソース・ソフトウェアの ユーザ・ドキュメントを公開するためのアプリだ。

Pamflet 0.8.2 はモノスペースのタイプフェイスを SFMono へと変更する。また、Blueprint から Bootstrap に移行したときに不意に導入されたピンクの文字色を元に戻す。

依存性解決のセマンティクス

in

依存性解決のセマンティクスは、ユーザーが指定した依存性の制約から具象クラスパスを決定する。詳細の違いはバージョン衝突の解決のされ方の違いとして表れる。

  • Maven は nearest-wins 戦略を取り、これは間接依存性をダウングレードすることがある。
  • Ivy は latest-wins 戦略を取る。
  • Cousier は一般的には latest-wins 戦略を取るが、バージョン範囲の計算は厳しい。
  • Ivy のバージョン範囲の処理は Internet へ出てしまうため、ビルドの再現性が落ちる。
  • Coursier のバージョン順序は Ivy と全く異なるものなので注意。

Expecty 0.12.0 and 0.13.0

in

sbt 1.3.0

in

皆さんこんにちは。sbt プロジェクトを代表して sbt 1.3.0 をアナウンスします。これは sbt 1 のフィーチャーリリース第3弾で、バイナリ互換性は維持しつつ新機能にフォーカスを当てたリリースとなっている。sbt 1 は Semantic Versioning にもとづいてリリースされるので、プラグインは sbt 1.x シリーズ中機能することが期待されている。

sbt 1.3 の主な新機能はデフォルトでの Coursier を使ったライブラリ管理、ClassLoader レイヤリング、IO の改善、そして super shell だ。これらの機能の組み合わせがビルドのユーザーエクスペリエンスを向上することを願っている。

互換性に影響のある変更点

  • Coursier を用いたライブラリ管理。詳細は後ほど。
  • ClassLoader レイヤリング。詳細は後ほど。
  • super shell。詳細は後ほど。
  • マルチコマンドの先頭にセミコロンが要らなくなった。clean;Test/compile; で動作するようになった。 [#4456][4456] by [@eatkins][@eatkins]

sbt-projectmatrix を用いた並列クロスビルド

去年 sbt のクロスビルドを改善するために、sbt-projectmatrix という実験的プラグインを書いた。0.2.0 をリリースしたのでここで紹介する。

複数の Scala バージョンに対するビルド

sbt-projectmatrix をビルドに追加後、以下のようにして 2つの Scala バージョンを使ったマトリックスをセットアップする。

ThisBuild / organization := "com.example"
ThisBuild / scalaVersion := "2.12.8"
ThisBuild / version      := "0.1.0-SNAPSHOT"
 
lazy val core = (projectMatrix in file("core"))
  .settings(
    name := "core"
  )
  .jvmPlatform(scalaVersions = Seq("2.12.8", "2.11.12"))

これは coreJVM2_11coreJVM2_12 というサブプロジェクトを作る。
++ スタイルのステートフルなクロスビルドと違って、これは並列にビルドする。

Syndicate content