1. sbt 1.2.x リリース

sbt 1.2.x リリース 

sbt 1.2.1 

前方バイナリ互換性の破壊 

プラグインを作成している場合は、1.2.1以降を使用し、1.2.0は避けてください。

1.2.0で意図せず前方バイナリ互換性を壊してしまいました。sbt 1.2.0を使用してsbtプラグインを公開した場合、sbt 1.0.xまたは1.1.xからは使用できません。sbt 1.2.1ではこの変更を元に戻すため、前方互換性が復元されます。残念ながら、これは`inThisBuild(...)`などで可変長引数を使用できなくなることを意味します。

`AutoPlugin`で0.13.5で行ったように、将来的に前方互換性を壊す可能性がありますが、トレードオフに見合う場合のみです。

プロジェクトFooは不明な設定「bar」を参照しています 

2つ目の回帰修正は、1.2.0で表示される可能性のある警告の壁に対するものです。

[warn] The project ProjectRef(uri("file:/Users/xxx/work/akka/"), "akka-actor-typed") references an unknown configuration "multi-jvm" and was guessed to be "Multi-jvm".
[warn] This configuration should be explicitly added to the project.
[warn] The project ProjectRef(uri("file:/Users/xxx/work/akka/"), "akka-actor-typed-tests") references an unknown configuration "multi-jvm" and was guessed to be "Multi-jvm".
[warn] This configuration should be explicitly added to the project.

元の問題は、統合スラッシュ構文が、設定がサブプロジェクトの一部ではない場合に設定名を選択しないことでした。この警告は重要ではないため、このパッチリリースで削除しています。

プラグイン作成者は、カスタム設定を非表示として宣言し、次のようにサブプロジェクトに追加し始めることができます。

import sbt._
import sbt.Keys._

object ParadoxPlugin extends AutoPlugin {
  val ParadoxTheme = config("paradox-theme").hide
  override def projectConfigurations: Seq[Configuration] = Seq(ParadoxTheme)

  ....
}

統合スラッシュ構文パーサーを強化して、より堅牢にすることも検討しています。

その他のバグ修正 

  • JDK 9向けに`IO.relativize`を更新しました。 io#175 by @eatkins
  • 外部クラスファイルマネージャーの追加に関するロジックを修正しました。 zinc#562 by @allanrenucci

貢献者 

sbtとZinc 1の改善に貢献してくれた皆様に心から感謝申し上げます。使用、バグ報告、ドキュメントの改善、ビルドの移植、プラグインの移植、プルリクエストの提出とレビューをしていただきありがとうございました。

sbt、zinc、librarymanagement、util、io、launcher-package、websiteの`git shortlog -sn --no-merges v1.2.1...v1.2.0`によると、sbt 1.2.1は4人の貢献者によって開発されました:Eugene Yokota、Aaron S. Hawley、Ethan Atkins、Allan Renucci。ありがとうございます!また、これらの問題を報告してくれたChes MartinとYoshida-sanにも特別な感謝を申し上げます。


sbt 1.2.0 

**警告**:1.2.0で前方互換性の破壊が見つかったため、sbt 1.2.1以降へのアップグレードをお勧めします。

sbt 1.2の主な機能は、クロスJDKフォーキング、複合プロジェクト、実験的なシンクライアントです。しかし、sbt 1.1以降6ヶ月間蓄積してきた多くのバグ修正と機能強化があります。

プラグイン開発のためのSbtPlugin 

`SbtPlugin`はsbtプラグインのプロジェクトを宣言するためのプラグインです。これにより、スクリプトテストが自動的に導入され、`sbtPlugin := true`が設定されます。

lazy val root = (project in file("."))
  .enablePlugins(SbtPlugin)

**互換性に関する注意**:`ScriptedPlugin`はトリガーされたプラグインではなくなりました。

#3875 by @eed3si9n

クロスJDKフォーキング 

フォークされた`run`と`test`では、`java++`でJavaホームを切り替えられるようになりました。

sbt:helloworld> run
[info] Running (fork) Hello
[info] 1.8.0_171
sbt:helloworld> java++ 10!
[info] Reapplying settings...
sbt:helloworld> run
[info] Running (fork) Hello
[info] 10.0.1

sbtは`discoveredJavaHomes`設定にJavaホームを検出しようとし、shyiko/jabbaをサポートします。これは`Global / javaHomes`で拡張できます。

Global / javaHomes += "6" -> file("/something/java-6")

この機能は、古いJVMでライブラリをテストして互換性を確認することを目的としています。

#4139 by @2m@cunei、および@eed3si9n

scalaVersionでフィルタリングされた集約 

2015年、James RoperはscalaVersionでフィルタリングされた集約をsbt-dogeに貢献しました。この機能は、Rui Gonçalves(@ruippeixotog)によって#3698/#3995でsbt 1.2に戻ってきました!

これは、スイッチコマンド`++`を拡張して、オプションの``を受け入れるようにします。

> ++2.12.7 compile

これは`++2.12.7`が有効なサブプロジェクトのみを集約します。これは、一部のサブプロジェクトが2.11のみなど、ビルドに複数のバージョンがある場合に便利です。

複合プロジェクト 

sbt 1.2.0では、「複合プロジェクト」トレイトが導入され、プラグイン作成者はクロスビルドなど、サブプロジェクトを生成できるようになりました。

trait CompositeProject {
  def componentProjects: Seq[Project]
}

これは@BennyHillによって#4056として貢献されました。

プロジェクトマトリックス 

**実験的**。`CompositeProject`のリファレンス実装として、sbt-projectmatrixプラグインによって導入された新しいDSLである`projectMatrix`を実装しました。

lazy val core = (projectMatrix in file("core"))
  .scalaVersions("2.12.7", "2.11.12")
  .settings(
    name := "core"
  )
  .jvmPlatform()

lazy val app = (projectMatrix in file("app"))
  .dependsOn(core)
  .scalaVersions("2.12.7")
  .settings(
    name := "app"
  )
  .jvmPlatform()

このプラグインの目的は、サブプロジェクトを使用して表現されるクロスビルド(Scalaバージョン、プラットフォームなど)の一般的な概念をサポートすることです。上記の`projectMarix`は、`coreJVM2_12`、`coreJVM2_11`、`appJVM2_12`の3つのサブプロジェクトを生成します。

セマンティックバージョンセレクターAPI 

sbt 1.2.0では、`VersionNumber()`データ型にセマンティックバージョンセレクターが導入され、基本的な一致、比較(`<=`、`<`、`>=`、`>`)、組み合わせ(`>1.0.0 <2.0.0`、`||`)、範囲(`A.B.C - D.E.F`)、ワイルドカード(`2.12.x`)がサポートされるようになりました。

scala> import sbt.librarymanagement.{ VersionNumber, SemanticSelector }
import sbt.librarymanagement.{VersionNumber, SemanticSelector}

scala> VersionNumber("2.12.5").matchesSemVer(SemanticSelector(">=2.12"))
res1: Boolean = true

scala> VersionNumber("2.12.5").matchesSemVer(SemanticSelector("<2.12"))
res2: Boolean = false

scala> VersionNumber("2.13.0-M4").matchesSemVer(SemanticSelector("2.13"))
res3: Boolean = false

scala> VersionNumber("2.12.5").matchesSemVer(SemanticSelector("2.12.1 - 2.12.7"))
res4: Boolean = true

scala> VersionNumber("2.12.5").matchesSemVer(SemanticSelector("2.12.x"))
res5: Boolean = true

scala> VersionNumber("2.12.5").matchesSemVer(SemanticSelector("2.11.x || 2.12.x"))
res6: Boolean = true

**注意**:現時点ではライブラリ管理には影響ありません。

これはRikito Taniguchi(@tanishiking)によってlm#239として貢献されました。

addPluginSbtFileコマンド 

IntelliJから、ビルドにプラグインを安全に挿入するリクエストがありました。sbt 1.2.0では、それを行うための`-addPluginSbtFile`コマンドが追加されました。

$ cat /tmp/extra.sbt
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.7")

$ sbt -addPluginSbtFile=/tmp/extra.sbt
...
sbt:helloworld> plugins
In file:/xxxx/hellotest/
  ...
  sbtassembly.AssemblyPlugin: enabled in root

@eed3si9nによって#4211として実装されました。

拡張可能なsbtサーバー 

実験的機能です。sbtサーバーはプラグインを介して拡張できるようになりました。

    Global / serverHandlers += ServerHandler({ callback =>
      import callback._
      import sjsonnew.BasicJsonProtocol._
      import sbt.internal.protocol.JsonRpcRequestMessage
      ServerIntent(
        {
          case r: JsonRpcRequestMessage if r.method == "lunar/helo" =>
            jsonRpcNotify("lunar/oleh", "")
            ()
        },
        PartialFunction.empty
      )

この機能はまだ実験段階であり、APIは将来変更される可能性があります。

#3975 by @eed3si9n

シンクライアント 

実験的機能です。sbt 1.2.0では、-clientという新しいモードが追加されました。sbtを-clientコマンドで起動すると、ビルドはロードされなくなり、代わりにJSON-RPCを介してsbtサーバーのインスタンスに接続しようとします。サーバーが実行されていない場合(ポートファイルが見つからない場合)、新しいJVMでsbtの新しいインスタンスが完全にフォークされます。

これにより、ターミナルシェルまたはエディターからsbtを呼び出すことができます。

$ time sbt -client clean
[info] entering *experimental* thin client - BEEP WHIRR
[info] server was not detected. starting an instance
[info] waiting for the server...
[info] waiting for the server...
[info] waiting for the server...
[info] waiting for the server...
[info] server found
> clean
[success] completed
sbt -client clean  9.23s user 2.33s system 22% cpu 50.558 total

# server stays
$ ps | rg java
21860 ttys015    1:22.43 java -Xms2048M -Xmx2048M -Xss2M -jar /usr/local/Cellar/sbt/1.1.6/libexec/bin/sbt-launch.jar
22014 ttys015    0:00.00 rg java

$ time sbt -client clean
[info] entering *experimental* thin client - BEEP WHIRR
> clean
[info] Updating ...
[info] Done updating.
[success] completed
sbt -client clean  3.39s user 1.75s system 104% cpu 4.898 total

サーバーを終了するには、sbt -client shutdownを実行します。#4227 by @eed3si9n

さらに、Rustを使用して実装された代替シンクライアントとしてcb372/sbt-clientdwijnand/sbtlもあります。

互換性に影響する変更点 

  • 非推奨コマンド------を削除しました。代わりにonFailuresbtClearOnFailureresumeFromFailureを使用してください。#4124
  • ++がサブプロジェクトに影響を与えない場合、失敗するようにしました。#4269 by @eed3si9n

その他のバグ修正と改善点 

  • 出力キャッシングのバグを修正しました。util#169 by @bpholt
  • 「出力ファイルが存在します」というエラーメッセージを修正しました。lm#255 by @eed3si9n
  • Command.process(String, State): Stateを再導入しました。#4023 by @dwijnand
  • JVMシャットダウン時にactive.jsonが削除されない問題を修正しました。#4194 by @veera83372
  • Windowsでタイムスタンプを読み取るときのファイルアクセス許可エラー(「CreateFile() failed」)を修正しました。io#134 by @cunei
  • .valueが欠落しているのを検出するリンターを修正しました。#4090 by @eed3si9n
  • removeEscapeSequencesStringIndexOutOfBoundsExceptionを修正しました。util#139 by @dwijnand
  • nullチェックにより、OkHttpのJavaNetAuthenticatorを修正しました。lm#177 by @eed3si9n
  • デフォルトのタイムアウトを1時間に延長することで、Sonatypeのタイムアウト問題を修正しました。lm#246 by @peterneyens
  • 並列ダウンロード中のスレッドスラッシングエラーを修正しました。lm249 by @OlegYch
  • エラーとしてログに記録されていたJavadoc警告を修正しました。zinc#506 by @kaygorodov
  • classOf[A]を拾わないクラス依存関係を修正しました。zinc#510 by @natansil
  • 存在しないオブジェクトを含むクラス依存関係を修正しました。zinc422 by @romanowski
  • 非推奨の0.10/0.12 DSL構文のドキュメントへのリンクを修正しました。#3901 by [@colindean]
  • skipキーのドキュメントを修正しました。#3926 by @dkim
  • フォークされていない並列テストでの競合状態を修正しました。#3985 by @retronym
  • Global / cancelabletrueに設定されている場合の、フォークされたテストでのCtrl-C処理を修正しました。#4226 by @driquelme
  • runのスタックトレースを修正しました。#4232 by @eed3si9n
  • sbt newで使用されるGiter8のバージョンを0.11.0に上げ、様々な問題を修正しました。#4263 by @eed3si9n
  • Javacエラーの解析を改善しました。zinc#557 by @eed3si9n
  • デフォルトでは、eviction警告のサマリーのみを表示し、ThisBuild / evictionWarningOptionsを使用して設定可能にしました。lm211 and #3947 by @exoego
  • inThisBuild(...)inConfig(C)(...)inTask(t)(...)inScope(scope)(...)で可変長引数を許可しました。#4106 by @dwijnand
  • sbt 0.13のrunのように動作するfgRunfgRunMainタスクを追加しました。#4216 by @agaro1121
  • スクリプトファイル名としてtest.scriptpending.scriptをサポートしました。#4220 by @regadas
  • inspectコマンドでエイリアスをサポートしました。#4221 by @gpoirier
  • ~の監視メッセージに現在のプロジェクトIDを追加しました。#2038 / #3813 by @dwijnand
  • PathFinder#getget()に変更しました。io#104 by @dwijnand
  • アクセスが拒否されたときのエラーメッセージを改善しました。lm#203 by @stephennancekivell
  • 「ローカルを選択」という警告メッセージを、より実行可能なものにしました。lm#248 by @khvatov
  • scalacオプションの変更を無視するオプションを追加しました。zinc#548 by @lukaszwawrzyk
  • プラグインでスクリプト化されたものの並列実行を有効にしました。#3891 by @jvican
  • Configuration軸スコープフィルターinConfigurationsByKeysinConfigurationsByRefsのファクトリーメソッドを追加しました。#3994
  • ケバブケースのコマンドに代わるlastGreploadFailedなどのコマンドを追加しました。#4080 by @naferx#4159 by @Asamsig、and #4169 by @tiqwab
  • JUnitXMLレポートにタイムスタンプフィールドを追加しました。4154 by @timcharper
  • 「設定を読み込み中」のログメッセージにサブプロジェクト名を表示するようになりました。#4164 by @alodavi
  • aboutコマンドでプラグインリストをソートしてインデントするようになりました。#4187 by @mcanlas
  • -Dsbt.offlineoffline設定を設定するようになりました。#4198 by @eed3si9n
  • クロスJDKフォーキング時に最新のJDKを選択します(詳細は下記参照)#4245 by @raboof

内部的な変更 

  • コンパイラの警告をいくつか削除しました。#3087 by @dwijnand
  • @dwijnandによるその他多くのリファクタリング
  • Zincのコンパイラの警告をいくつか削除しました。zinc#493 by @exoego
  • パフォーマンス向上: IO.directoryURIでの不要なURIのコピーの作成を防ぎました。io#132 by @jrudolph
  • パフォーマンス向上: initStringCodecsでのreflect universeの初期化を回避しました。util#153 by @jrudolph
  • パフォーマンス向上: Parsers.validIDを高速化しました。#3952 by @jrudolph
  • パフォーマンス向上: for内包表記を手動で作成することで、スコープの委譲を最適化しました。#4003 by @jrudolph and @eed3si9n
  • 内部コードでvarの代わりにvalを使用しました。#4253 by @xuwei-k

貢献者 

sbtとZinc 1の改善にご協力いただいた皆様に改めて感謝申し上げます。

sbt 1.2.0は60人のコントリビューターによって実現されました。Dale Wijnand、Eugene Yokota、Kenji Yoshida (xuwei-k)、Yasuhiro Tatsuno (exoego)、Łukasz Wawrzyk、Jorge Vicente Cantero (jvican)、Alistair Johnson、Antonio Cunei、Jason Zaugg、Rikito Taniguchi (tanishiking)、Seiya Mizuno、Tim Harper、Aloisia Davì (alodavi)、Arnout Engelen、Ethan Atkins、Johannes Rudolph、Krzysztof Romanowski、Allan Renucci、Brian P. Holt、Filipe Regadas、Hiroshi Ito、Martijn Hoekstra、OlegYch、Seth Tisue、natans、Aaron S. Hawley、Alex Khvatov、Alexander Samsig、Andreas Jim-Hartmann、Andrei Pozolotin、Andrey Kaygorodov、Anthony Garo、Christopher Hunt、Colin Dean、Daniel Riquelme、Deokhwan Kim、Gerard Maas、Guillaume Poirier、Heikki Vesalainen、Jason Pickens、Jonas Fonseca、Julien Jerphanion、Justin Pihony、Kazufumi Nishida、Kyle Goodale、Maksym Fedorov、Mark Canlas、Martynas Mickevičius、Michael Pollmeier、Mike Skells、Nafer Sanabria、Naohisa Murakami (tiqwab)、PanAeon、Peter Neyens、Rui Gonçalves、Sean Sullivan、Stephen Nancekivell、Veera Venky、blakkan、ortigali。ありがとうございました!