coursier
はScalaやJavaのパッケージやツール(例:sbt、scala、scala-cli、jvm など)を素早くインストール・管理できるツール。
# On Linux x86-64 (aka AMD64)
curl -fL "https://github.com/coursier/launchers/raw/master/cs-x86_64-pc-linux.gz" | gzip -d > cs
# On Linux ARM64
curl -fL "https://github.com/VirtusLab/coursier-m1/releases/latest/download/cs-aarch64-pc-linux.gz" | gzip -d > cs
chomd +x cs
cs setup
でcoursierをセットアップする。
./cs setup
Checking if a JVM is installed
https://github.com/coursier/jvm-index/raw/master/index.json
100.0% [##########] 2.6 MiB (2.9 MiB / s)
No JVM found, should we try to install one? [Y/n] y
https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.7%2B6/OpenJDK21U-jdk_x64_linux_hotspot_2…
100.0% [##########] 197.3 MiB (14.3 MiB / s)
Should we update ~/.profile? [Y/n] y
Some shell configuration files were updated. It is recommended to close this terminal once the setup command is done, and open a new one for the changes to be taken into account.
Checking if ~/.local/share/coursier/bin is in PATH
Should we add ~/.local/share/coursier/bin to your PATH via ~/.profile? [Y/n] y
Checking if the standard Scala applications are installed
Installed ammonite
Installed cs
Installed coursier
Installed scala
Installed scalac
Installed scala-cli
Installed sbt
Installed sbtn
Installed scalafmt
sbt init
を実行してプロジェクトを作成する。今回は最小限のScala3アプリケーション (Scala3 seed template
) を使うので、 d
を選択する。
Welcome to sbt new!
Here are some templates to get started:
a) scala/toolkit.local - Scala Toolkit (beta) by Scala Center and VirtusLab
b) typelevel/toolkit.local - Toolkit to start building Typelevel apps
c) sbt/cross-platform.local - A cross-JVM/JS/Native project
d) scala/scala3.g8 - Scala 3 seed template
e) scala/scala-seed.g8 - Scala 2 seed template
f) playframework/play-scala-seed.g8 - A Play project in Scala
g) playframework/play-java-seed.g8 - A Play project in Java
i) softwaremill/tapir.g8 - A tapir project using Netty
m) scala-js/vite.g8 - A Scala.JS + Vite project
n) holdenk/sparkProjectTemplate.g8 - A Scala Spark project
o) spotify/scio.g8 - A Scio project
p) disneystreaming/smithy4s.g8 - A Smithy4s project
q) quit
Select a template: d
q) quit
Select a template: d
A template to demonstrate a minimal Scala 3 application
name [Scala 3 Project Template]: scalahello
Template applied in /tmp/tmp.BMV8miGMCY/./scalahello
src/main/scala/Main.scala
を編集して次の内容を書く。
object Main {
def main(args: Array[String]): Unit =
println("Hello, Scala 3.7!")
}
基本的なビルド操作は sbt
の対話セッション内で行う。
また、起動時に多少の時間がかかるが、 sbt clean
、sbt compile
、sbt run
のようにコマンドの引数に内部コマンドを指定することもできる。sbt clean compile
のように複数のコマンドを一度に指定してもよい。
cd scalahello
sbt
sbt:ScalaHello> scalaVersion
[info] 3.7.0
sbt:ScalaHello>
run
コマンドでScalaプログラムを実行できる。
sbt:ScalaHello> run
[info] running Main
Hello, Scala 3.7!
[success] Total time: 0 s, completed May 17, 2025, 5:58:07 PM
Scalaプログラムをjarにコンパイルするには、sbtのアセンブリプラグインを使う。
https://github.com/sbt/sbt-assembly
project/plugins.sbt
を編集して、アセンブリプラグインを追加する。
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "2.1.5")
プロジェクト直下にある build.sbt
を編集して、つぎの内容を書き込む。
val scala3Version = "3.7.0"
lazy val root = project
.in(file("."))
.settings(
name := "ScalaHello",
version := "0.1.0-SNAPSHOT",
scalaVersion := scala3Version,
libraryDependencies += "org.scalameta" %% "munit" % "1.0.0" % Test
)
// ----------------------------------
// 下記の内容を追加
// ----------------------------------
enablePlugins(AssemblyPlugin) // アセンブリプラグインを追加
mainClass := Some("Main") // エントリーポイントのクラス名を指定
// jarファイル内のファイルが衝突した場合の設定
assemblyMergeStrategy := {
case PathList("META-INF", _ @ _*) => MergeStrategy.discard
case _ => MergeStrategy.first
}
sbtの対話セッションに戻り assembly
コマンドを実行するとScalaプログラムをjarにコンパイルできる。
sbt:ScalaHello> assembly
[info] 2 file(s) merged using strategy 'Discard' (Run the task at debug level to see the details)
[info] Built: /tmp/tmp.BMV8miGMCY/scalahello/target/scala-3.7.0/ScalaHello-assembly-0.1.0-SNAPSHOT.jar
[info] Jar hash: d1a824ff5938db8b8426a247ba93b4f04a7bd258
[success] Total time: 1 s, completed May 17, 2025, 6:04:41 PM
sbt:ScalaHello>
コンパイルしたjarを実行するには次のようにする。
java -jar target/scala-3.7.0/ScalaHello-assembly-0.1.0-SNAPSHOT.jar
Hello, Scala 3.7!