1. sbt 1.4.x リリース

sbt 1.4.x リリース 

sbt 1.4.1 

  • sbt newが文字をエコーバックしない問題を修正 #5954 by @eatkins
  • Zincでのコンパイラエラーレポートの問題を修正 zinc#931 by @adpi2
  • dependencyBrowseTreeなどを修正 #5967 by @naderghanbari
  • Scala 2.13-3.0のScala.JSに対するサンドイッチサポートを修正 #5984 by @xuwei-k
  • classesディレクトリが「classesが存在しません」エラーを引き起こす問題の回避策を追加 zinc#934 by @eed3si9n
  • ClassfileManager出力へのログを追加 #5990 by @smarter
  • Ctrl-CCtrl-Dの処理を修正 #5947/#5975 by @eatkins
  • 特定の状況で-Dsbt.color=trueが機能しない問題を修正 #5960 by @eatkins
  • project/targetがシンボリックリンクの場合のFileAlreadyExistsExceptionを修正 #5972 by @eatkins
  • パイプされた出力に表示されるANSI制御文字を修正 #5966 by @eatkins
  • jEditでの行読み込みの問題を修正 #5946 by @eatkins
  • 無効なbuild.sbt--batchでのsbtのハングアップを修正 #5945 by @eatkins
  • .inputrcファイルのサポートを修正 #5973 by @xuwei-k
  • リコンパイル時にBSP警告診断が消える問題を修正 #5950 by @adpi2
  • カスタム構成に対するBSPサポートを修正 #5930 by @adpi2
  • カスタムレポーターがMatchErrorを引き起こす問題を修正 #5948 by @adpi2
  • ビルドリンティングでのshellPromptrelease*キーの警告を修正 #5983/#5991 by @xirc and @eed3si9n
  • <task>.valueマクロが不必要な「純粋な式は何もしません」という警告を引き起こす問題を修正 #5981 by @eed3si9n
  • リモートキャッシュ内のSemanticDBファイルを保持 #5961 by @xuwei-k
  • JDKクロスビルドへのAdoptOpenJDKサポートを追加 #5964 by @rdesgroppes
  • サブプロジェクト別にグループ化することでpluginsコマンドの出力を改善 #5932 by @aaabramov

sbt 1.4.0 

sbt 1.4.0の主な機能は次のとおりです。

  • ビルドサーバープロトコル(BSP)サポート
  • sbtn:sbtのネイティブシンクライアント
  • ビルドキャッシング
  • ThisBuild / versionSchemeによるeviction警告の推測の排除

ビルドサーバープロトコル(BSP)サポート 

sbt 1.4.0は、Scala Centerが提供するビルドサーバープロトコル(BSP)サポートを追加しました。主要な実装は、@eed3si9nのプロトタイプに基づいて、Adrien Piquerez(@adpi2)によって行われました。

sbt 1.4.0が起動すると、.bsp/sbt.jsonという名前のファイルが作成されます。このファイルには、ビルドサーバープロトコルを使用してsbtサーバーと通信するコマンドラインプログラムであるsbt -bspを実行する方法に関する、機械可読な指示が含まれています。

BSPを使用したIntelliJへのインポート方法 

  1. ターミナルでsbtを起動します。
  2. IntelliJ IDEA 2020.1.2以降を開きます。
  3. 「開くまたはインポート」を選択し、「BSPプロジェクト」を選択します。

VS Code + Metalsへのインポート方法 

  1. 既存の.bsp.metals.bloopディレクトリがあれば削除します。
  2. 作業ディレクトリでVS Codeを開きます。
  3. プロジェクトをインポートするプロンプトを無視します。
  4. ターミナルタブでsbt -Dsbt.semanticdb=trueを起動します。「sbtサーバーが起動しました」と表示されるまで待ちます。
  5. Metalsビューに移動し、「ビルドサーバーを再起動」を選択します。
  6. SemanticDBファイルを生成するために、sbtセッションにcompileと入力します。

#5538/#5443 by @adpi2

ネイティブシンクライアント 

sbt 1.4.0は、すべてのタスクをサポートするsbtnという公式のネイティブシンクライアントを追加しました。公式のsbtランチャー1.4.0を使用していて、偽物ではない場合は、--clientオプションを使用してネイティブシンクライアントを実行できます。

$ sbt --client compile
$ sbt --client shutdown

ネイティブシンクライアントはsbt(サーバー)をデーモンとして実行するため、2回目以降の呼び出しではJVMの起動と読み込み時間が回避されます。これは、ZshやFishなどのシステムシェルからsbtを使用したい場合に役立つオプションです。

終了したらsbt --client shutdownを必ず呼び出してください。環境変数を使用してこれを有効にしたい場合は、SBT_NATIVE_CLIENTtrueに設定します。sbtnバイナリファイルは、https://github.com/sbt/sbtn-dist/releases/tag/v1.4.0からも入手できます。

#5620 by @eatkins

ThisBuild / versionScheme 

sbt 1.4.0は、ビルドのバージョン方式を追跡するための新しい設定ThisBuild / versionSchemeを追加しました。

ThisBuild / versionScheme := Some("early-semver")

サポートされる値は"early-semver""pvp""semver-spec"です。sbtはこの情報をプロパティとしてpom.xmlivy.xmlに含めます。さらに、sbt 1.4.0はこの情報を使用して、この情報が利用可能な場合にeviction警告の推測を排除します。#5724 by @eed3si9n

VirtualFile + RemoteCache 

sbt 1.4.0 / Zinc 1.4.0は、インクリメンタルコンパイル中に追跡されるファイルパスの仮想化を行います。これにより、ThisBuild / rootPathsが事前に列挙されている限り、インクリメンタルコンパイルの状態を異なるマシン間で共有できます。

これを示すために、sbtに**実験的な**キャッシュされたコンパイル機能も追加しました。必要なのは次の設定だけです。

ThisBuild / pushRemoteCacheTo := Some(MavenCache("local-cache", file("/tmp/remote-cache")))

次に、マシン1からpushRemoteCacheを呼び出します。これにより、*.classとZinc Analysisアーティファクトがその場所に公開されます。次に、マシン2からpullRemoteCacheを呼び出します。

zinc#712/#5417 by @eed3si9n

ビルドリンティング 

起動時に、sbt 1.4.0 は使用されていない設定/タスクをチェックします。ほとんどの設定は他の設定/タスクの中間にあるため、デフォルトでlintに含まれます。特筆すべき例外は、コマンドによってのみ使用される設定です。オプトアウトするには、Global / excludeLintKeys に追加するか、ランクを非表示に設定します。

#5153 by @eed3si9n

条件付きタスク 

sbt 1.4.0 は、条件付きタスク(または選択的タスク)のサポートを追加しました。これは、Def.task { ... }if 式で構成されている場合に自動的に作成される新しい種類のタスクです。

bar := {
  if (number.value < 0) negAction.value
  else if (number.value == 0) zeroAction.value
  else posAction.value
}

通常の(Applicative)タスク合成とは異なり、条件付きタスクは、if 式で自然に期待されるように、then 節と else 節の評価を遅延させます。これは Def.taskDyn { ... } でも既に可能ですが、動的タスクとは異なり、条件付きタスクは inspect コマンドで動作します。詳細は sbt の Selective functor を参照してください。#5558 by @eed3si9n

インクリメンタルビルドのパイプライン化 

sbt 1.4.0 は、実験的なインクリメンタルビルドのパイプライン化を追加しました。ビルドのビルドパイプラインを有効にするには

ThisBuild / usePipelining := true

一部のサブプロジェクトの早期出力の作成をオプトアウトするには

exportPipelining := false

#5703 by @eed3si9n

sbt-dependency-graph のソースコード内への統合 

sbt 1.4.0 は、Johannes Rudolph の sbt-dependency-graph プラグインをコードベースに統合しました。これはサブプロジェクトごとに多くのタスクを注入するため、プラグインは2つの部分に分割されています。- デフォルトで有効になっているMiniDependencyTreePlugin は、dependencyTree タスクを CompileTest の設定に追加します - 次のものをproject/plugins.sbtに追加することで有効になる、フル機能のDependencyTreePlugin

addDependencyTreePlugin

互換性に影響を与える修正 

  • Appender のリークを回避するために、デフォルトで Apache Log4j を独自のロガーに置き換えました。Log4j を使用するには、ThisBuild / useLog4J := true を使用します。#5731 by @eatkins
  • エントリを名前でソートし、タイムスタンプを削除することで、JAR ファイルの作成を繰り返し可能にしました #5344/io#279 by @raboof
  • ビルドファイルのアルファベット順にベアメタ設定を読み込みます #2697/#5447 by @eed3si9n
  • ビルドファイル内で val を上から下に読み込みます #2232/#5448 by @eed3si9n
  • HTTP リゾルバーは、.withAllowInsecureProtocol(true) を使用した明示的なオプトインが必要です #5593 by @eed3si9n
  • トリガーされた実行 ~ 中に Ctrl-C を押すと、sbt をシャットダウンする代わりにシェルに戻ります #5804 by @eatkins

その他の更新 

  • より良いタブ補完のために、JLine 3 を使用するようにシェルを更新しました #5671 by @eatkins
  • Scala 2.13-3.0 のサンドイッチをサポートしました #5767 by @eed3si9n
  • -Dsbt.rootdir=true なしで / から sbt を実行しようとするとエラーが発生します #5112 by @eed3si9n
  • State => State を受け入れるように StateTransform を更新しました #5260 by @eatkins
  • バックグラウンド実行に関する様々な問題を修正しました #5259 by @eatkins
  • TERM が "dumb" に設定されている場合、supershell をオフにします #5278 by @hvesalai
  • ログのためにシステムの一時ディレクトリを使用しないようにしました #5289 by @eatkins
  • sbt.ForkMain のライブラリエンドポイントを追加しました #5315 by @olafurpg
  • ディレクトリの最終更新時刻を使用して doc を無効にしないようにしました #5362 by @eatkins
  • カスタム設定の packageSrc のデフォルトアーティファクトを修正しました #5403 by @eed3si9n
  • タスクのキャンセル処理を修正しました #5446/zinc#742 by @azolotko
  • タプル構文のために Initialize[A]toTaskable メソッドインジェクションを追加しました #5439 by @dwijnand
  • 未定義の設定に関するエラーメッセージを修正しました #5469 by @nigredo-tori
  • semanticdbVersion を 4.3.7 に更新しました #5481 by @anilkumarmyla
  • JsonFormat[A] の代わりに JsonWriter[A] の型クラスの証拠を必要とする Tracked.outputChangedWTracked.inputChangedW を追加しました #5513 by @bjaglin
  • 様々な supershell の干渉を修正しました #5319 by @eatkins
  • sbt サーバー通信を容易にするために、State拡張メソッド を追加しました #5207 by @eed3si9n
  • testGrouping に重み付けされたタグのサポートを追加しました #5527 by @frosforever
  • Jawn 1.0.0 をシェード化した sjson-new に更新しました #5595 by @eed3si9n
  • 資格情報レルムが null の場合の NullPointerError を修正しました #5526 by @3rwww1
  • 別のタスクに通信するための long-running タスク用に Def.promise を追加しました #5552 by @eed3si9n
  • ネイティブ呼び出しを使用する代わりに、JDK 10 以降で Java のタイムスタンプを使用します io#274 by @slandelle
  • 公開中にバックオフによる再試行を追加しました(-Dsbt.repository.publish.attempts を 3 に設定) lm#340 by @izharahmd
  • PUT のエラーメッセージを改善しました lm#309 by @swaldman
  • AnalyzedClass にプロビナンスを追加しました zinc#786 by @dwijnand + @mspnf
  • childrenOfSealedClass のハッシュを安定させました zinc#788 by @dwijnand
  • ビルドソース監視に関するパフォーマンスの回帰を修正しました #5530 by @eatkins
  • super shell に関するパフォーマンスの回帰を修正しました #5531 by @eatkins
  • Zinc の様々なパフォーマンスの改善 zinc#756/zinc#763 by @retronym
  • 過剰な GC について警告するモニターを追加しました #5812 by @eatkins
  • 複数のフィンガープリントに一致する場合に、フォークされたテストがテストを2回実行する問題を修正しました #5800 by @Duhemm

参加者 

sbt 1.4.0 は 34 人の貢献者によって実現しました。Ethan Atkins、Eugene Yokota (eed3si9n)、Johannes Rudolph、Dale Wijnand、Adrien Piquerez、Jason Zaugg、Arnout Engelen、Josh Soref、Guillaume Martres、Maksim Ochenashko、Anil Kumar Myla、Brice Jaglin、Claudio Bley、João Ferreira、Steve Waldman、frosforever、Alex Zolotko、Heikki Vesalainen、Ismael Juma、Stephane Landelle、Jannik Theiß、izharahmd、lloydmeta、Alexandre Archambault、Eric Peters、Erwan Queffelec、Kenji Yoshida (xuwei-k)、Martin Duhem、Olafur Pall Geirsson、Renato Cavalcanti、Vincent PERICART、nigredo-tori。ありがとうございます!