1. sbt 1.0.x リリース

sbt 1.0.x リリース 

sbt 1.0.4 

これは sbt 1.0.x シリーズのホットフィックスリリースです。

バグ修正 

  • 基になる型が変更された場合のバリュークラスの過少コンパイルを修正します。 zinc#444 by @smarter
  • Java 9 で実行中に Ivy で ArrayIndexOutOfBoundsException が発生するのを修正します。 ivy#27 by @xuwei-k
  • ランチャーを 1.0.2 にアップグレードすることにより、Java 9 の警告を修正します。 ivy#26/launcher#45 by @dwijnand
  • Java 9 での -jvm-debug を修正します。 launcher-package197 by @mkurz
  • run がデバッグレベルのログを出力するのを修正します。 #3655/#3717 by @cunei
  • クラスパスのハッシュ化によって発生したパフォーマンスの低下を修正します。 zinc#452 by @jvican, @fommil provided reproduction, and @eed3si9n fixed https://github.com/sbt/zinc/issues/457
  • testQuick のパフォーマンスの低下を修正します。 #3680/#3720 by @OlegYch
  • #3711 で報告されたパフォーマンス低下のため、Ivy log4j の呼び出し元位置計算を無効にします。 util#132 by @leonardehrenfried
  • Scala コンパイラの templateStats() がスレッドセーフでない問題を回避します。 #3743 by @cunei
  • 「上書きしようとしています」エラーメッセージを修正します。 lm#174 by @dwijnand
  • 誤った削除警告メッセージを修正します。 lm#179 by @xuwei-k
  • Ivy プロトコルを http: および https: に対してのみ登録して、よりプラグインフレンドリーにします。 lm183 by @tpunder
  • expr を使用して、bc に関連するスクリプトの問題を修正します。 launcher-package#199 by @thatfulvioguy

機能強化 

内部 

貢献者 

sbt および Zinc 1 を使用し、バグを報告し、ドキュメントを改善し、ビルドを移植し、プラグインを移植し、プルリクエストを送信およびレビューすることで、sbt および Zinc 1 の改善にご協力いただいた皆様に、心より感謝申し上げます。

このリリースは、sbt、zinc、librarymanagement、util、io、および website の git shortlog -sn --no-merges v1.0.3..v1.0.4 によると、17 人の貢献者によって提供されました。Eugene Yokota, Kenji Yoshida (xuwei-k), Jorge Vicente Cantero (jvican), Dale Wijnand, Leonard Ehrenfried, Antonio Cunei, Brett Randall, Guillaume Martres, Arnout Engelen, Fulvio Valente, Jens Grassel, Matthias Kurz, OlegYch, Philippus Baalman, Sam Halliday, Tim Underwood, Tom Most. ありがとうございました!


sbt 1.0.3 

これは sbt 1.0.x シリーズのホットフィックスリリースです。

バグ修正 

  • (ソースジェネレーターまたは sbt-buildinfo が存在する場合)~ がループで再コンパイルされる問題を修正します。 #3501/#3634 by @dwijnand
  • 同じソースの継承における過少コンパイルを修正します。 zinc#424 by @eed3si9n
  • パッケージ保護されたオブジェクトのコンパイルを修正します。 zinc#431 by @jvican
  • Java が getGenericParameterTypes に対して null を返す問題を回避します。 zinc#446 by @jvican
  • テスト検出の回帰を修正します。sbt 1.0.3 はリストからネストされたオブジェクト/クラスを除外し、0.13 との互換性を復元します。 #3669 by @cunei
  • ビルド定義に Scala 2.12.4 を使用します。これには、Java 9 での空のパッケージメンバーのランタイムリフレクションの修正が含まれます。 #3587 by @eed3si9n
  • Ivy スタイルパターンでの余分な / を修正します。 lm#170 by @laughedelic
  • ファイル名を含めることで、「宛先ファイルが存在する」エラーメッセージを修正します。 lm171 by @leonardehrenfried
  • ライブラリ管理モジュールと Ivy での JDK 9 の警告「Illegal reflective access」を修正します。 lm173 by @dwijnand

改善点 

  • 監視の古いポーリング動作に戻すことを許可する sbt.watch.mode システムプロパティを追加します。詳細については、下記をご覧ください。

代替ウォッチモード 

sbt 1.0.0 では、Java 1.7 の NIO WatchService に基づいたソース変更を監視する新しいメカニズムが導入されました。一部のプラットフォーム (特に macOS) では、これにより、変更が検出されるまでに長い遅延が発生しました。これらのプラットフォーム用の代替 WatchService は sbt 1.1.0 で計画されており (#3527)、当面はどのウォッチサービスを選択するかを選択するオプションが追加されました。

次のサポートされている値を持つ新しい sbt.watch.mode JVM フラグが追加されました

  • polling: (macOS のデフォルト) ファイルシステムの変更をポーリングします (sbt 0.13 で使用されていたメカニズム)。
  • nio (他のプラットフォームのデフォルト): NIO ベースの WatchService を使用します。

macOS 以外のマシンで長い遅延が発生する場合は、sbt オプションに -Dsbt.watch.mode=polling を追加してみてください。

#3597 by @stringbean

貢献者 

sbt および Zinc 1 を使用し、バグを報告し、ドキュメントを改善し、ビルドを移植し、プラグインを移植し、プルリクエストを送信およびレビューすることで、sbt および Zinc 1 の改善にご協力いただいた皆様に、心より感謝申し上げます。

このリリースは、sbt、zinc、librarymanagement、util、io、および website の git shortlog -sn --no-merges v1.0.2..v1.0.3 によると、15 人の貢献者によって提供されました。Eugene Yokota, Dale Wijnand, Michael Stringer, Jorge Vicente Cantero (jvican), Alexey Alekhin, Antonio Cunei, Andrey Artemov, Jeffrey Olchovy, Kenji Yoshida (xuwei-k), Dominik Winter, Long Jinwei, Arnout Engelen, Justin Kaeser, Leonard Ehrenfried, Sakib Hadžiavdić. ありがとうございました!


sbt 1.0.2 

これは sbt 1.0.x シリーズのホットフィックスリリースです。

バグ修正 

  • ターミナルエコーの問題を修正します。 #3507 by @kczulko
  • deliver タスクを修正し、より適切な名前のタスクとして makeIvyXml を追加します。 #3487 by @cunei
  • 非推奨の OkUrlFactory の使用を置き換え、接続リークを修正します。 lm#164 by @dpratt
  • 設定キーの DSL チェッカーの偽陽性を再修正します。 #3513 by @dwijnand
  • runbgRun がクラスパス内のディレクトリへの変更を検出しない問題を修正します。 #3517 by @dwijnand
  • ++crossScalaVersion の値を変更しないように修正します。 #3495/#3526 by @dwijnand
  • sbt サーバーが一部のメッセージを欠落させる問題を修正します。 #3523 by @guillaumebort
  • consoleProject を再修正します。 zinc#386 by @dwijnand
  • repositories オーバーライドと組み合わせて使用するときの JavaNetAuthenticator での NPE を回避するために、Gigahorse の内部使用を有効/無効にする JVM フラグ sbt.gigahorse を追加します。 lm#167 by @cunei
  • sbt シェルで sbt サーバーの自動起動を有効/無効にする JVM フラグ sbt.server.autostart を追加します。これにより、サーバーを手動で起動するための新しい startServer コマンドも追加されます。 by @eed3si9n

内部 

貢献者 

sbt および Zinc 1 を使用し、バグを報告し、ドキュメントを改善し、プラグインを移植し、プルリクエストを送信およびレビューすることで、sbt および Zinc 1 の改善にご協力いただいた皆様に、心より感謝申し上げます。

このリリースは、sbt、zinc、librarymanagement、およびウェブサイト上で git shortlog -sn --no-merges v1.0.1..v1.0.2 を実行した結果、19人のコントリビューターによって提供されました。Dale Wijnand, Eugene Yokota, Kenji Yoshida (xuwei-k), Antonio Cunei, David Pratt, Karol Cz (kczulko), Amanj Sherwany, Emanuele Blanco, Eric Peters, Guillaume Bort, James Roper, Joost de Vries, Marko Elezovic, Martynas Mickevičius, Michael Stringer, Răzvan Flavius Panda, Peter Vlugter, Philippus Baalman, and Wiesław Popielarskiの皆様、ありがとうございました!


sbt 1.0.1 

これは sbt 1.0.x シリーズのホットフィックスリリースです。

バグ修正 

  • クロスビルド用の+コマンドのコマンドサポートを修正しました。sbt 1.0に追加された+は、crossScalaVersionsを尊重してサブプロジェクトをトラバースしますが、引数としてコマンドを受け付けなくなっていました。これにより、そのサポートが復活します。#3446 by @jroper
  • クロスビルド中に、addSbtPluginが正しいバージョンのsbtを使用するように修正しました。#3442 by @dwijnand
  • run in CompileタスクがRuntime構成を含まない問題を、runbgRunで実装し直すことで修正しました。#3477 by @eed3si9n
  • inspectの潜在的なオプションとしてactualを表示します。#3335 by @Duhemm
  • 監視対象ソースにベースディレクトリを含めます。#3439 by @Duhemm
  • ロギング周辺での断続的なNullPointerExceptionの回避を試みます。util#121 by @eed3si9n
  • 誤った前方移植を元に戻します。#3481 by @eed3si9n

WatchSource 

監視対象ソース機能は、sbt 0.13からsbt 1.0への移行でNIOを使用して大幅な変更が行われましたが、明確な移行パスがありませんでした。そのため、sbt 1.0.1で修正します。

まず、sbt.WatchSourcesbt.internal.io.Sourceの新しいエイリアスです。キーの名前がwatchSourcesであるため、覚えやすいと思います。次に、def apply(base: File)def apply(base: File, includeFilter: FileFilter, excludeFilter: FileFilter)コンストラクタがsbt.WatchSourceのコンパニオンオブジェクトに追加されました。

下位互換性のために、sbt 1.0.1では、FileからSeq[WatchSource]への+=サポート(Appendインスタンス)を追加します。

したがって、監視したいディレクトリがある場合は

watchSources += WatchSource(sourceDirectory.value)

ファイルのリストがある場合

watchSources ++= (sourceDirectory.value ** "*.scala").get

#3438 by @Duhemm; #3478 and io#74 by @eed3si9n


sbt 1.0.0 

互換性に影響を与える機能、修正、変更 

sbt 0.13.xからの移行も参照してください。

  • sbt 1.0は、ビルド定義とプラグインにScala 2.12を使用します。これにはJDK 8も必要です。
  • 多くのケースクラスがContrabandを使用して生成された擬似ケースクラスに置き換えられています。.copy(foo = xxx)withFoo(xxx)に移行してください。たとえば、UpdateConfigurationRetrieveConfigurationPublishConfigurationはビルダーパターンを使用するようにリファクタリングされています。
  • Zinc 1は、Scala 2.9以前のサポートを削除します。Scala 2.10は2.10.2以降を使用する必要があります。Scala 2.11は2.11.2以降を使用する必要があります。(最新のパッチリリースを推奨)
  • config("xyz")は、val Xyz = config("xyz")のように、大文字valに直接代入する必要があります。これにより、lhs識別子が構成にキャプチャされるため、後でシェルから使用できます。
  • publishTootherResolversをSettingKeysからTaskKeysに変更します。#2059/#2662 by @dwijnand
  • Path.relativizeFile(baseFile, file)IO.relativizeFile(baseFile, file)に名前が変更されます。
  • PathFinder.***メソッドは.allPathsメソッドに名前が変更されます。
  • PathFinder.x_!(mapper)PathFinderdef pairに移動されます。
  • sbt.Pathの一部のメソッド(relativeTorebaseflatなど)は、sbtパッケージオブジェクトに混入されたため、デフォルトの名前空間には存在しなくなりました。再びアクセスするには、sbt.io.Pathを使用してください。
  • sbt 1.0は、スコープコンポーネントとしてのGlobalの名前をGlobalScopeと区別するためにZeroに変更します。@eed3si9n
  • sbt 1.0は、update.value.configuration(...)のように、構成を参照するためにStringが使用されていた箇所でConfigRefを使用します。Configurationを渡してください。これは暗黙的にConfigRefに変換されます。
  • sourceArtifactTypesdocArtifactTypesSet[String]設定からSeq[String]設定に変更します。
  • 初期コマンド機能を--<command>からearly(<command>)に名前を変更します。
  • sbt 0.12スタイルのハイフン区切りのキー名を削除します(publish-localの代わりにpublishLocalを使用します)。
  • ログオプション-error-warn-info-debugが、"early(error)"などの省略形として追加されました。
  • sbt.Processsbt.ProcessExtraは削除されました。代わりにscala.sys.processを使用してください。
  • 名前ハッシュが常にオンになっているため、incOptions.value.withNameHashing(...)オプションは削除されました。
  • TestResult.ValueTestResultと呼ばれるようになりました。
  • スクリプト化されたプラグインがクロスバージョン化されたため、依存する場合は%%を使用する必要があります。

非推奨のものが削除されました:

  • sbt 0.13.12で非推奨になったsbt 0.12スタイルのBuildトレイトが削除されました。build.sbtに移行してください。自動プラグインとBuildトレイトはうまく連携せず、その機能は現在、主にマルチプロジェクトbuild.sbtによって包含されています。
  • sbt 0.12スタイルのProject(...)コンストラクタは、2つのパラメータに制限されています。これは、settingsパラメータが自動プラグインとうまく連携しないためです。代わりにprojectを使用してください。
  • sbt 0.12スタイルのキー依存演算子<<=<+=<++=が削除されました。 :=、+=、および++=に移行してください。これらの演算子は多くのユーザーにとって混乱の原因であり、0.13ドキュメントから長い間削除され、sbt 0.13.13以降正式に非推奨とされていました。
  • 非自動のsbt.Pluginトレイトは削除されました。AutoPluginに移行してください。自動プラグインは構成が容易で、相互に連携しやすくなっています。
  • ProjectからsettingsSetsメソッド(add/setSbtFilesも同様)を削除します。
  • 非推奨のInputTask applyメソッドとinputTask DSLメソッドを削除します。Def.inputTaskDef.spaceDelimited().parsedを使用してください。
  • 非推奨のProjectReference暗黙的なリフトを削除します。RootProject(<uri>)RootProject(<file>)、またはLocalProject(<string>)を使用してください。
  • 非推奨のseq(..) DSLメソッドを削除します。Seqを使用するか、ラップせずに設定を渡してください。
  • 非推奨のFile/Seq[File]設定エンリッチメントを削除します。.valueDef.settingを使用してください。
  • 非推奨のSubProcess applyオーバーロードを削除します。SubProcess(ForkOptions(runJVMOptions = ..))を使用してください。
  • toError(opt: Option[String]): Unitを削除します(opt foreach sys.errorと同等)。ScalaRun#runをラップするために使用する場合、代替はscalaRun.run(...).failed foreach (sys error _.getMessage)です

機能 

  • Zinc 1と呼ばれる新しいインクリメンタルコンパイラ。詳細は以下を参照してください。
  • 対話型シェルはネットワークAPIを追加します。詳細は以下を参照してください。

修正 

  • テストコンテンツログが表示されない問題を修正します。#3198/util#80 by @eed3si9n
  • 「解析できません」という紛らわしいログを修正します。lm#98 by @jvican
  • consoleタスクを修正します。zinc#295 by @dwijnand
  • 無関係なコンストラクタの変更時に発生する偽の再コンパイルを修正します。zinc#288 by @smarter
  • 古い演算子に対するrestligeistマクロを修正します。#3218 by @eed3si9n
  • updateタスクのタスクキャッシュを修正します。#3233 by @eed3si9n
  • JLineを2.14.4に更新することで、ncurses-JLineの問題を修正します。util#81 by @Rogach

改善点 

  • Scala Centerは、JavaフレンドリーなZinc APIを提供しました。これは、他のビルドツールとの良好なScala統合のためのZinc内部APIのオーバーホールでした。zinc#304 by @jvican
  • Scala Centerは、Zincの内部ストレージのバイナリ形式を提供しました。以下を参照してください
  • Scala Centerは、build.sbtの静的検証を提供しました。以下を参照してください
  • ライブラリ管理APIと並列アーティファクトダウンロード。以下を参照してください。
  • scalasを使用したスクリプトモードでは、起動ログレベルが-errorに低下します。#840 by @eed3si9n
  • クロスビルドのサポートをsbt-dogeに置き換えます。これにより、複数の異なるクロスScalaバージョンの組み合わせを持つプロジェクトを含むビルドを正しくクロスビルドできます。++の動作が変更され、そのScalaバージョンをサポートするプロジェクトのScalaバージョンのみが更新されますが、Scalaバージョンは!をポストフィックスとして使用して、すべてのプロジェクトに対して強制的に変更できます。どのプロジェクトの設定が変更されているか、およびそのクロスScalaバージョンに関する詳細情報を出力する-v引数が追加されました。#2613 by @jroper
  • CI環境が検出された場合、ivyLoggingLevelUpdateLogging.Quietに低下します。@eed3si9n
  • 使用されているさまざまなbuild.sbt*.sbtに一致)ファイルの名前のロギングを追加します。#1911 by @valydia
  • aggregateをビルドsbtファイル内の現在のプロジェクトに対して呼び出す機能を追加します。By @xuwei-k
  • inspect treeなどのコマンドによって出力されるASCIIグラフの最大幅を制御する新しいグローバル設定asciiGraphWidthを追加します。デフォルト値は、以前ハードコードされていた40文字の値に対応します。By @RomanIakovlev.
  • スコープのドキュメントを改訂し、スコープ委譲を追加しました。@eed3si9n
  • プラグインのクロスビルドのために、sbt-cross-buildingの^および^^コマンドを移植します。以下を参照してください。
  • クロスバージョン除外のサポートを追加しました。#1518/lm#88 by @jvican
  • Ivyベースのライブラリ管理に新しいオフラインモードを追加しました。lm#92 by @jvican
  • 依存関係のロックに関するいくつかの機能を追加しました。詳細は下記を参照してください。
  • より見やすいエビクション警告表示に改善しました。詳細は下記を参照してください。
  • メインクラスの検出が改善されました。zinc#287 by @smarter
  • 起動を高速化するため、sbt は Java リフレクションを使用して autoImport を検出するようになりました。#3115 by @jvican
  • 起動を高速化するため、パース処理に同じグローバルインスタンスを再利用するようになりました。#3115 by @jvican
  • sbt 0.13 との互換性を維持するため、sbt-core-next から InteractionService を追加しました。#3182 by @eed3si9n
  • PollingWatchService と Java NIO を抽象化する新しい WatchService を追加しました。io#47 by @Duhemm (The Scala Center を代表して)
  • sbt.io.CopyOptions() を受け入れる IO.copyFile および IO.copyDirectory のバリアントを追加しました。詳細は下記を参照してください。
  • Path.directory および Path.contentOf を sbt-native-packager から寄贈されました。io#38 by @muuki88
  • Zinc のデバッグに使用される ApiDiff 機能で、Dotty から借りてきた Scala 実装が使用されるようになりました。zinc#346 by @Krever
  • Zinc の内部で、ExtractAPI が perRunCaches を使用するようにしました。zinc#347 by @gheine

内部実装 

  • ソースコードのフォーマットに neo-scalafmt を使用して Scalafmt を採用しました。
  • Scala Center は、バッチモード実行を備えたスクリプトテストフレームワークの再設計に貢献しました。スクリプトテストは、sbt テストを実行するために同じ sbt インスタンスを再利用するようになり、CI ビルド時間が 50% 短縮されました。#3151 by @jvican
  • sbt 1.0.0-M6 は sbt 1.0.0-M5 を使用してビルドされています。#3184 by @dwijnand

主な変更点の詳細 

Zinc 1: クラスベースの名前ハッシュ 

Grzegorz Kossakowski 氏 (Lightbend が委託) によって Zinc 1.0 に導入された主な改善点は、クラスベースの名前ハッシュです。これにより、大規模プロジェクトでの Scala のインクリメンタルコンパイルが高速化されます。

Zinc 1.0 の名前ハッシュは、ソースファイルレベルではなく、クラスレベルでコードの依存関係を追跡します。GitHub の issue sbt/sbt#1104 には、いくつかのプロジェクトで既存のクラスにメソッドを追加した場合の比較がいくつかリストされています。

ScalaTest   AndHaveWord class:          Before 49s, After 4s (12x)
Specs2      OptionResultMatcher class:  Before 48s, After 1s (48x)
scala/scala Platform class:             Before 59s, After 15s (3.9x)
scala/scala MatchCodeGen class:         Before 48s, After 17s (2.8x)

これは、クラスの構成方法などのいくつかの要因に依存しますが、3 倍から 40 倍の改善が見られます。高速化の理由は、ソースファイルからクラスを分離することで、以前よりもコンパイルするソースファイルの数が少なくなるためです。scala/scala の Platform クラスにメソッドを追加する例では、sbt 0.13 の名前ハッシュでは 72 個のソースをコンパイルしていましたが、新しい Zinc では 6 個のソースしかコンパイルしません。

Zinc API の変更 
  • xsbti.compile パッケージ下の Java クラス (例: IncOptions) はコンストラクタを隠蔽します。ファクトリメソッド xsbti.compile.Foo.of(...) を使用してください。
  • ivyScala: IvyScala キーの名前を scalaModuleInfo: ScalaModuleInfo に変更しました。
  • xsbti.Reporter#log(...) はパラメータとして xsbti.Problem を受け取ります。古い log(...) に委譲するには、log(problem.position, problem.message, problem.severity) を呼び出してください。
  • xsbi.Maybexsbti.F0、および sxbti.F1 は、対応する Java 8 クラスである java.util.Optionaljava.util.Supplier、および java.util.Function に変更されました。
  • 未使用の「resident」オプションを削除しました。zinc#345 by @lukeindykiewicz
sbt server: ツール統合のための JSON API 

sbt 1.0 にはサーバー機能が含まれており、IDE やその他のツールが JSON API を介してビルドの設定をクエリしたり、コマンドを呼び出したりできます。sbt 0.13 のインタラクティブシェルが shell コマンドで実装されているのと同様に、「server」もまた、人間の入力とネットワーク入力の両方をリッスンする単なる shell コマンドです。ユーザーとしては、サーバーによる影響は最小限であるはずです。

2016 年 3 月に、「サーバー」機能を可能な限り小さくするために再起動しました。機能リストを絞り込むために、IntelliJ の sbt インターフェイスに取り組んでいる JetBrains の @jastice 氏と協力しました。sbt 1.0 には、当初望んでいたすべての機能があるわけではありませんが、長期的には、このシステムを使用して IDE と sbt エコシステム間の統合が改善されることを願っています。たとえば、IDE はコンパイルタスクを発行し、コンパイラの警告を JSON イベントとして取得できるようになります。

{"type":"xsbti.Problem","message":{"category":"","severity":"Warn","message":"a pure expression does nothing in statement position; you may be omitting necessary parentheses","position":{"line":2,"lineContent":"  1","offset":29,"pointer":2,"pointerSpace":"  ","sourcePath":"/tmp/hello/Hello.scala","sourceFile":"file:/tmp/hello/Hello.scala"}},"level":"warn"}

追加されたもう 1 つの関連機能は bgRun タスクです。たとえば、これにより、サーバープロセスをバックグラウンドで実行しながら、それに対してテストを実行できます。

build.sbt の静的検証 

sbt 1.0 では、タスク内の if 式と匿名関数の本体内での .value 呼び出しを禁止します。@sbtUnchecked アノテーションを使用すると、このチェックをオーバーライドできます。

静的検証では、タスクの本体で .value を呼び出すのを忘れた場合も検出します。

#3216 および #3225 by @jvican

エビクション警告の表示 

sbt 1.0 では、エビクション警告の表示が改善されました。

以前

[warn] There may be incompatibilities among your library dependencies.
[warn] Here are some of the libraries that were evicted:
[warn]  * com.google.code.findbugs:jsr305:2.0.1 -> 3.0.0
[warn] Run 'evicted' to see detailed eviction warnings

以後

[warn] Found version conflict(s) in library dependencies; some are suspected to be binary incompatible:
[warn]
[warn]      * com.typesafe.akka:akka-actor_2.12:2.5.0 is selected over 2.4.17
[warn]          +- de.heikoseeberger:akka-log4j_2.12:1.4.0            (depends on 2.5.0)
[warn]          +- com.typesafe.akka:akka-parsing_2.12:10.0.6         (depends on 2.4.17)
[warn]          +- com.typesafe.akka:akka-stream_2.12:2.4.17 ()       (depends on 2.4.17)
[warn]
[warn] Run 'evicted' to see detailed eviction warnings

#3202 by @eed3si9n

sbt クロスビルド 

@jrudolph の sbt-cross-building は、プラグイン作成者向けのプラグインです。これは、+ および ++ と同様に、クロスコマンド ^ と sbtVersion スイッチコマンド ^^ を追加しますが、メジャーバージョン間で複数の sbt バージョンを切り替えるために使用します。sbt 0.13.16 は、これらのコマンドを sbt にマージしました。これは、プラグインを sbt 1.0 に移行する際に、提供される機能が役立つためです。

シェルから pluginCrossBuildsbtVersion を切り替えるには、次を使用します。

^^ 1.0.0-M5

これで、プラグインは sbt 1.0.0-M5 (およびその Scala バージョン 2.12.2) でビルドされます。

特定の sbt バージョンに固有の変更を加える必要がある場合は、src/main/scala-sbt-0.13 および src/main/scala-sbt-1.0.0-M5 に含めることができます。ここでは、バイナリの sbt バージョン番号が接尾辞として使用されます。

複数の sbt バージョンにわたってコマンドを実行するには、次を設定します。

crossSbtVersions := Vector("0.13.15", "1.0.0-M5")

次に、次を実行します。

^ compile

#3133 by @eed3si9n (0.13.16-M1 からフォワードポート)

CopyOptions 

sbt IO 1.0 では、sbt.io.CopyOptions() を受け入れる IO.copyFile および IO.copyDirectory のバリアントが追加されました。CopyOptions() は、ビルダーパターンに似た擬似ケースクラスの例です。

import sbt.io.{ IO, CopyOptions }

IO.copyDirectory(source, target)

// The above is same as the following
IO.copyDirectory(source, target, CopyOptions()
  .withOverwrite(false)
  .withPreserveLastModified(true)
  .withPreserveExecutable(true))

io#53 by @dwijnand

ライブラリ管理 API と並列アーティファクトダウンロード 

sbt 1.0 では、Lightbend の Eugene Yokota (@eed3si9n) と Scala Center の Martin Duhem (@Duhemm) が共同で作成したライブラリ管理 API が追加されました。この API は、Apache Ivy と、代替の依存関係解決エンジンである Ivy、キャッシュされた解決、および Coursier を抽象化することを目的としています。

Ivy エンジンの並列アーティファクトダウンロードは、Scala Center の Jorge (@jvican) によって提供されました。また、Network API として Gigahorse OkHttp が導入され、アーティファクトのダウンロードにも Square OkHttp が使用されています。

lm#124 by @eed3si9n/@Duhemmlm#90 by @jvican/@jsuereth および lm#104 by @eed3si9n

Zinc の内部ストレージのバイナリ形式 

Scala Center の Jorge (@jvican) は、Google Protocol Buffer を使用した Zinc の内部ストレージ用のバイナリ形式を提供しました。新しい形式には、主に 3 つの利点があります。

  1. 解析形式レベルでのバイナリの旧バージョンおよび新バージョンとの互換性。
  2. 解析ファイルのより高速な (1.5 ~ 2 倍) シリアル化/デシリアル化。
  3. 解析ファイルをマシンに依存しないようにするためのより良い方法を提供。

zinc#351 by @jvican

依存関係のロック 

依存関係のロック機能はまだ開発中ですが、Scala Center の Jorge (@jvican) は、依存関係のロックを可能にするために連携して動作するはずの、いくつかの関連機能を追加しました。

  • Ivy ベースのライブラリ管理へのフリーズモード。これにより、解決が常に非推移的になります。lm#100
  • 依存関係の解決プログラムを指定するためのサポートを追加しました。lm#97
  • Ivy にチェックサムプロセスをスキップするように指示する「管理されたチェックサム」を追加しました。lm#111

貢献者 

ここで感謝するには多すぎるほど多くの人がいます。「クレジット」を参照してください。