title | sidebar_position |
---|---|
Export ⚡️ |
27 |
Export outputs information about current project to a format used by external build tools such as SBT or Mill. Additionally the command supports JSON format for custom analysis of projects.
The project configuration is read both from information specified in source files
as well as options passed to the export
command
Let's take a simple one-file project as an example:
//> using scala "3.1.3"
//> using option "-Xasync"
//> using dep "com.lihaoyi::os-lib:0.9.0"
object Hello {
def main(args: Array[String]): Unit =
println(os.pwd)
}
scala-cli export Hello.scala --sbt
Note that --sbt
is not required here since it's the default.
The result is a sbt-compliant project created in the dest/
directory:
dest
├── project
│ └── build.properties
├── src
│ └── main
│ └── scala
│ └── Hello.scala
└── build.sbt
All the project's configuration resides now in dest/build.sbt
:
scalaVersion := "3.1.3"
scalacOptions ++= Seq("-Xasync")
libraryDependencies += "com.lihaoyi" %% "os-lib" % "0.9.0"
libraryDependencies += "com.lihaoyi" %% "os-lib" % "0.9.0" % Test
To further configure the new SBT project you can pass options to the export
command:
setting
- extra SBT settings like XXXXXsbtVersion
- version of SBT used for the export, default is 1.6.1
scala-cli export Hello.scala --mill
Now the --mill
option is required.
The results are again created in the dest/
directory:
dest
├── project
│ └── src
│ └── Hello.scala
├── .mill-version
├── build.sc
├── mill
└── mill.bat
And all the project's configuration resides now in dest/build.sc
:
import mill._
import mill.scalalib._
object project extends ScalaModule {
def scalaVersion = "3.1.3"
def scalacOptions = super.scalacOptions() ++ Seq("-Xasync")
def ivyDeps = super.ivyDeps() ++ Seq(
ivy"com.lihaoyi::os-lib:0.9.0"
)
object test extends Tests {
def ivyDeps = super.ivyDeps() ++ Seq(
ivy"com.lihaoyi::os-lib:0.9.0"
)
}
}
The script files mill
and mill.bat
are mill wrappers fetched from lefou/millw repository.
To change the build tool version used override the contents of dest/.mill-version
, default is 0.10.10.
For exporting information into a more readable format use the --json
flag.
scala-cli export Hello.scala --json
The result is the dest/export.json
file:
{
"scalaVersion": "3.1.3",
"platform": "JVM",
"scopes": {
"main": {
"sources": [
"Foo.scala"
],
"scalacOptions": [
"-Xasync"
],
"dependencies": [
{
"groupId": "com.lihaoyi",
"artifactId": {
"name": "os-lib",
"fullName": "os-lib_3"
},
"version": "0.9.0"
}
],
"resolvers": [
"https://repo1.maven.org/maven2",
"ivy:file:///Users/mgajek/Library/Caches/ScalaCli/local-repo/v0.1.20-111-648755-DIRTY2ba64fdc//[organisation]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]",
"ivy:file:/Users/mgajek/.ivy2/local/[organisation]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]"
]
}
}
}
Note that the path to the output directory (dest
by default) can be overriden with output
option.