Skip to content

Latest commit

 

History

History
151 lines (117 loc) · 3.63 KB

export.md

File metadata and controls

151 lines (117 loc) · 3.63 KB
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)
}

Exporting to SBT:

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 XXXXX
  • sbtVersion - version of SBT used for the export, default is 1.6.1

Exporting to Mill:

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.

Exporting to JSON:

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.