Directives
This document describes as scala-cli behaves if run as scala
command. See more information in SIP-46
This document is a specification of the scala
runner.
For now it uses documentation specific to Scala CLI but at some point it may be refactored to provide more abstract documentation.
Documentation is split into sections in the spirit of RFC keywords (MUST
, SHOULD
).
MUST have directives:
Compiler options
Add Scala compiler options
//> using option
option
//> using options
option1 option2 …
Examples
//> using option -Xasync
//> using test.option -Xasync
//> using options -Xasync -Xfatal-warnings
Compiler plugins
Adds compiler plugins
using plugin
org:
name:
ver
Examples
//> using plugin org.typelevel:::kind-projector:0.13.2
Dependency
Add dependencies
//> using dep
org:
name:
ver
Examples
//> using dep com.lihaoyi::os-lib:0.9.1
//> using test.dep org.scalatest::scalatest:3.2.10
//> using test.dep org.scalameta::munit:0.7.29
//> using dep "tabby:tabby:0.2.3,url=https://github.com/bjornregnell/tabby/releases/download/v0.2.3/tabby_3-0.2.3.jar"
Java options
Add Java options which will be passed when running an application.
//> using javaOpt
options
Examples
//> using javaOpt -Xmx2g, -Dsomething=a
//> using test.javaOpt -Dsomething=a
Java properties
Add Java properties
//> using javaProp
key=value
//> using javaProp
key
Examples
//> using javaProp foo1=bar, foo2
//> using test.javaProp foo3=bar foo4
Main class
Specify default main class
//> using mainClass
main-class
Examples
//> using mainClass HelloWorld
Scala version
Set the default Scala version
//> using scala
version+
Examples
//> using scala 3.0.2
//> using scala 2.13
//> using scala 2
//> using scala 2.13.6, 2.12.16
SHOULD have directives:
Custom JAR
Manually add JAR(s) to the class path
//> using jar
path
//> using jars
path1 path2 …
Examples
//> using jar /Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/chuusai/shapeless_2.13/2.3.7/shapeless_2.13-2.3.7.jar
//> using test.jar /Users/alexandre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/chuusai/shapeless_2.13/2.3.7/shapeless_2.13-2.3.7.jar
//> using sourceJar /path/to/custom-jar-sources.jar
//> using sourceJars /path/to/custom-jar-sources.jar /path/to/another-jar-sources.jar
//> using test.sourceJar /path/to/test-custom-jar-sources.jar
Custom sources
Manually add sources to the project. Does not support chaining, sources are added only once, not recursively.
//> using file
path
//> using files
path1 path2 …
Examples
//> using file utils.scala
Exclude sources
Exclude sources from the project
//> using exclude
pattern
//> using exclude
pattern1 pattern2 …
Examples
//> using exclude utils.scala
//> using exclude "examples/*" "*/resources/*"
//> using exclude "*.sc"
JVM version
Use a specific JVM, such as 14
, adopt:11
, or graalvm:21
, or system
. scala-cli uses coursier to fetch JVMs, so you can use cs java --available
to list the available JVMs.
//> using jvm
value
Examples
//> using jvm 11
//> using jvm adopt:11
//> using jvm graalvm:21
Java home
Sets Java home used to run your application or tests
//> using javaHome
path
Examples
//> using javaHome /Users/Me/jdks/11
Javac options
Add Javac options which will be passed when compiling sources.
//> using javacOpt
options
Examples
//> using javacOpt -source 1.8 -target 1.8
//> using test.javacOpt -source 1.8 -target 1.8
Platform
Set the default platform to Scala.js or Scala Native
//> using platform
(jvm
|scala-js
|js
|scala-native
|native
)+
Examples
//> using platform scala-js
//> using platform jvm scala-native
Repository
Add repositories for dependency resolution.
Accepts predefined repositories supported by Coursier (like sonatype:snapshots
or m2Local
) or a URL of the root of Maven repository
//> using repository
repository
Examples
//> using repository jitpack
//> using repository sonatype:snapshots
//> using repository m2Local
//> using repository https://maven-central.storage-download.googleapis.com/maven2
Resource directories
Manually add a resource directory to the class path
//> using resourceDir
path
//> using resourceDirs
path1 path2 …
Examples
//> using resourceDir ./resources
//> using test.resourceDir ./resources
Scala Native options
Add Scala Native options
//> using nativeGc
value
//> using nativeMode
value
//> using nativeLto
value
//> using nativeVersion
value
//> using nativeCompile
value1 value2 …
//> using nativeLinking
value1 value2 …
//> using nativeClang
value
//> using nativeClangPP
value
//> using nativeEmbedResources
true|false
//> using nativeTarget
application|library-dynamic|library-static
Examples
//> using nativeVersion 0.4.0
Scala.js options
Add Scala.js options
//> using jsVersion
value
//> using jsMode
value
//> using jsNoOpt
true|false
//> using jsModuleKind
value
//> using jsSmallModuleForPackage
value1 value2 …
//> using jsCheckIr
true|false
//> using jsEmitSourceMaps
true|false
//> using jsDom
true|false
//> using jsHeader
value
//> using jsAllowBigIntsForLongs
true|false
//> using jsAvoidClasses
true|false
//> using jsAvoidLetsAndConsts
true|false
//> using jsModuleSplitStyleStr
value
//> using jsEsVersionStr
value
//> using jsEmitWasm
true|false
//> using jsEsModuleImportMap
value
Examples
//> using jsModuleKind common
Test framework
Set the test framework
//> using testFramework
class-name
Examples
//> using testFramework utest.runner.Framework
Toolkit
Use a toolkit as dependency (not supported in Scala 2.12), 'default' version for Scala toolkit: 0.5.0, 'default' version for typelevel toolkit: 0.1.27
//> using toolkit
version
Examples
//> using toolkit 0.1.0
//> using toolkit default
//> using test.toolkit default