Scala Starter Pack

最終更新: 2024-01-11 06:19:43 +0800 +0800
tags: Jvm | Scala | Sbt
原文は英語で書かれています。あなたはAI翻訳版を読んでいます。

Scala は JVM バイトコードにコンパイルされます。ビルド時には Scala コンパイラーが必要であり、 アプリケーションの実行時クラスパスには Scala 標準ライブラリが必要です。 Scala のバイナリーバージョンは互換性の境界です。末尾が _2.13 のアーティファクトを _3 のアーティファクトで置き換えることはできません。

バージョンとツールチェーン #

Scala 2 と Scala 3 にはそれぞれ異なるコンパイラーと言語規則があります。クロス公開されたライブラリには、 プロジェクトが選択したバイナリーバージョンを使用します。Java ランタイムは Scala リリースに記載された JDK 要件を満たす必要があり、 デプロイで使う JDK でコンパイルとテストを実行します。

For a small program:

sh
scala-cli run Main.scala
scala-cli test .

Scala CLI はソース中心のプロジェクトでコンパイラーと依存関係の解決を管理します。 保守対象のアプリケーションでは、開発者のローカルなコマンド履歴に依存せず、ビルド定義をコミットしてください。

sbt #

sbt は Scala のビルドツールです。ランチャーは JVM 上で起動し、プロジェクトが宣言した sbt バージョンをダウンロードします。 project/build.properties で sbt のバージョンを固定し、Scala バージョンを一度だけ定義します。

scala
ThisBuild / scalaVersion := "3.5.2"
ThisBuild / organization := "com.example"

lazy val root = (project in file("."))
  .settings(
    name := "orders",
    libraryDependencies += "org.typelevel" %% "cats-core" % "2.12.0"
  )

プロジェクトルートから sbt test、sbt compile、sbt package を実行します。 %% 演算子は、現在の Scala バイナリーバージョンに一致するアーティファクト接尾辞を選択します。 sbt 自体はプロジェクトとは異なる Scala バージョンで実行できます。ランチャーは sbt 内部が必要とするバージョンを使います。

Coursier #

Coursier は JVM アーティファクトを解決し、Scala ツールをインストールします。 Maven 座標でアプリケーションを起動し、依存関係をキャッシュし、名前付きコマンドをインストールできます。

sh
cs launch scala:3.5.2 -- -version
cs install scala-cli

自動化ではアプリケーションの座標とバージョンを明示します。Coursier のキャッシュが再現性を高めるのは、 座標とリポジトリを管理している場合だけです。依存関係のロックやアーティファクトの検証に取って代わるものではありません。

座標、リポジトリ、チャネル #

Coursier は Maven の座標モデルを再利用し、Scala 固有のアーティファクト向けに拡張します。

  • Java アプリケーションには group:app:version。
  • Scala アーティファクトには group::app:version。
  • Scala のクロスバージョンアーティファクトには group:::app:version。

設定済みのリポジトリから依存関係を解決し、アーティファクトをローカルキャッシュにダウンロードします。 リポジトリはコマンドライン、ローカルディレクトリ、チャネル記述子ソースから指定できます。

チャネルはアプリケーション記述子 JSON ファイルの集合です。チャネルは HTTP で提供したり、 ローカルディレクトリを基盤にしたり、JAR ファイルにパッケージ化したりできます。 そのため Coursier は手書きのビルド定義なしでインストール可能なアプリを発見できます。

ランチャーとパッケージング #

Coursier がインストールするのは単なるソースツリーではなく、実行可能なランチャーです。 インストールされたコマンドは通常、スクリプトが先頭に付いた JAR、つまり小さなランチャースクリプトの後に JAR バイト列が続く形式です。 シェルラッパーは -J オプションを JVM に渡し、埋め込まれたアプリケーションのメインクラスを実行します。

sh
cs install scala-cli
cs launch scala:3.5.2 -- -version

このパッケージングにより、JAR 形式を java -jar 用に保ったまま、ユーザーは ./tool を直接実行できます。 実際のトレードオフとして、ランチャーはキャッシュされたアーティファクトと選択したリポジトリ集合に依存します。

コメント

GitHub で閲覧・コメントする(投稿にはログインが必要です)