sbtのセット

# 参考

[【Scala初心者向け】sbtを触ってみよう！](https://www.casleyconsulting.co.jp/blog/engineer/104/)
[sbt Reference Manual](https://www.scala-sbt.org/release/docs/Basic-Def.html)

# ディレクトリ構造のセット

下記のようなディレクトリ構造を作る

```
.
└── src
     └── main
          ├── java
          └── scala
```

まず、ルートフォルダを作り、そこに`cd`する。
ルートフォルダ配下に、前述のディレクトリ構造を作る。

```
$ mkdir -p src/main/scala
$ mkdir -p src/main/java
```

# build.sbtファイルの作成

ルートフォルダに`build.sbt`を新規作成する。

```
$ touch build.sbt
```

`build.sbt`ファイルを開いて、下記のように記述する。

```
name := "LeetCode"
scalaVersion := "2.13.6"
version := "1.5.4"
```

# コンパイル対象のScalaプログラムの作成

Scalaファイルを作成する。

```
$ touch src/main/scala/Main.scala
```

`Main.scala`ファイルを開いて、下記のように記述する。

```
object HelloWorldScala {
  def main(args: Array[String]) :Unit = {
    println("Hello World by Scala")
  }
}
```

# コンパイル

コンパイルを実行する。

```
$ sbt compile
...
[info] Non-compiled module 'compiler-bridge_2.13' for Scala 2.13.6. Compiling...
[info]   Compilation completed in 10.365s.
[success] Total time: 24 s, completed 2021/07/13 8:32:54
```

特にエラーがなければ、sbtを利用したコンパイルは成功。
成功すると、下記のようなディレクトリ構造になる。

```
$ tree
.
├── build.sbt
├── project
│   ├── build.properties
│   ├── metals.sbt
│   ├── project
│   │   ├── metals.sbt
│   │   ├── project
│   │   │   └── target
│   │   │       └── config-classes
│   │   │           ├── $f00fa0fcb0dc3a80c3cc$.class
│   │   │           ├── $f00fa0fcb0dc3a80c3cc.cache
│   │   │           └── $f00fa0fcb0dc3a80c3cc.class
│   │   └── target
│   │       ├── config-classes
│   │       │   ├── $11103368676eb29322ef$.class
│   │       │   ├── $11103368676eb29322ef.cache
│   │       │   └── $11103368676eb29322ef.class
│   │       ├── scala-2.12
│   │       │   └── sbt-1.0
│   │       │       └── update
│   │       │           └── update_cache_2.12
│   │       │               ├── inputs
│   │       │               └── output
│   │       └── streams
│   │           ├── _global
│   │           │   ├── _global
│   │           │   │   └── _global
│   │           │   │       └── streams
│   │           │   │           └── out
│   │           │   ├── csrConfiguration
│   │           │   │   └── _global
│   │           │   │       └── streams
│   │           │   │           └── out
│   │           │   ├── csrProject
│   │           │   │   └── _global
│   │           │   │       └── streams
│   │           │   │           └── out
│   │           │   ├── dependencyPositions
│   │           │   │   └── _global
│   │           │   │       └── streams
│   │           │   │           └── update_cache_2.12
│   │           │   │               ├── input_dsp
│   │           │   │               └── output_dsp
│   │           │   ├── ivyConfiguration
│   │           │   │   └── _global
│   │           │   │       └── streams
│   │           │   │           └── out
│   │           │   ├── ivySbt
│   │           │   │   └── _global
│   │           │   │       └── streams
│   │           │   │           └── out
│   │           │   ├── moduleSettings
│   │           │   │   └── _global
│   │           │   │       └── streams
│   │           │   │           └── out
│   │           │   ├── projectDescriptors
│   │           │   │   └── _global
│   │           │   │       └── streams
│   │           │   │           └── out
│   │           │   ├── scalaCompilerBridgeScope
│   │           │   │   └── _global
│   │           │   │       └── streams
│   │           │   │           └── out
│   │           │   └── update
│   │           │       └── _global
│   │           │           └── streams
│   │           │               └── out
│   │           ├── compile
│   │           │   ├── _global
│   │           │   │   └── _global
│   │           │   │       ├── compileOutputs
│   │           │   │       │   └── previous
│   │           │   │       └── discoveredMainClasses
│   │           │   │           └── data
│   │           │   ├── bspReporter
│   │           │   │   └── _global
│   │           │   │       └── streams
│   │           │   │           └── out
│   │           │   ├── compile
│   │           │   │   └── _global
│   │           │   │       └── streams
│   │           │   │           └── out
│   │           │   ├── compileIncremental
│   │           │   │   └── _global
│   │           │   │       └── streams
│   │           │   │           ├── export
│   │           │   │           └── out
│   │           │   ├── copyResources
│   │           │   │   └── _global
│   │           │   │       └── streams
│   │           │   │           ├── copy-resources
│   │           │   │           └── out
│   │           │   ├── dependencyClasspath
│   │           │   │   └── _global
│   │           │   │       └── streams
│   │           │   │           └── export
│   │           │   ├── exportedProducts
│   │           │   │   └── _global
│   │           │   │       └── streams
│   │           │   │           └── export
│   │           │   ├── externalDependencyClasspath
│   │           │   │   └── _global
│   │           │   │       └── streams
│   │           │   │           └── export
│   │           │   ├── incOptions
│   │           │   │   └── _global
│   │           │   │       └── streams
│   │           │   │           └── out
│   │           │   ├── internalDependencyClasspath
│   │           │   │   └── _global
│   │           │   │       └── streams
│   │           │   │           ├── export
│   │           │   │           └── out
│   │           │   ├── managedClasspath
│   │           │   │   └── _global
│   │           │   │       └── streams
│   │           │   │           └── export
│   │           │   ├── scalacOptions
│   │           │   │   └── _global
│   │           │   │       └── streams
│   │           │   │           └── out
│   │           │   ├── unmanagedClasspath
│   │           │   │   └── _global
│   │           │   │       └── streams
│   │           │   │           ├── export
│   │           │   │           └── out
│   │           │   └── unmanagedJars
│   │           │       └── _global
│   │           │           └── streams
│   │           │               └── export
│   │           └── runtime
│   │               ├── dependencyClasspath
│   │               │   └── _global
│   │               │       └── streams
│   │               │           └── export
│   │               ├── exportedProducts
│   │               │   └── _global
│   │               │       └── streams
│   │               │           └── export
│   │               ├── externalDependencyClasspath
│   │               │   └── _global
│   │               │       └── streams
│   │               │           └── export
│   │               ├── fullClasspath
│   │               │   └── _global
│   │               │       └── streams
│   │               │           └── export
│   │               ├── internalDependencyClasspath
│   │               │   └── _global
│   │               │       └── streams
│   │               │           ├── export
│   │               │           └── out
│   │               ├── managedClasspath
│   │               │   └── _global
│   │               │       └── streams
│   │               │           └── export
│   │               ├── unmanagedClasspath
│   │               │   └── _global
│   │               │       └── streams
│   │               │           ├── export
│   │               │           └── out
│   │               └── unmanagedJars
│   │                   └── _global
│   │                       └── streams
│   │                           └── export
│   └── target
│       ├── config-classes
│       │   ├── $2f8b5aa4317612ce36af$.class
│       │   ├── $2f8b5aa4317612ce36af.cache
│       │   ├── $2f8b5aa4317612ce36af.class
│       │   ├── $9604b12e616b474f8a1c$.class
│       │   ├── $9604b12e616b474f8a1c.cache
│       │   ├── $9604b12e616b474f8a1c.class
│       │   ├── $a6b5d306d66ca44dc5f6$.class
│       │   ├── $a6b5d306d66ca44dc5f6.cache
│       │   └── $a6b5d306d66ca44dc5f6.class
│       ├── scala-2.12
│       │   └── sbt-1.0
│       │       └── update
│       │           └── update_cache_2.12
│       │               ├── inputs
│       │               └── output
│       └── streams
│           ├── _global
│           │   ├── _global
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── out
│           │   ├── csrConfiguration
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── out
│           │   ├── csrProject
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── out
│           │   ├── dependencyPositions
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── update_cache_2.12
│           │   │               ├── input_dsp
│           │   │               └── output_dsp
│           │   ├── ivyConfiguration
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── out
│           │   ├── ivySbt
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── out
│           │   ├── moduleSettings
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── out
│           │   ├── projectDescriptors
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── out
│           │   ├── scalaCompilerBridgeScope
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── out
│           │   └── update
│           │       └── _global
│           │           └── streams
│           │               └── out
│           ├── compile
│           │   ├── _global
│           │   │   └── _global
│           │   │       ├── compileOutputs
│           │   │       │   └── previous
│           │   │       └── discoveredMainClasses
│           │   │           └── data
│           │   ├── bloopAnalysisOut
│           │   │   └── _global
│           │   │       └── streams
│           │   ├── bloopGenerate
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── out
│           │   ├── bloopPostGenerate
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── out
│           │   ├── bspReporter
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── out
│           │   ├── compile
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── out
│           │   ├── compileIncremental
│           │   │   └── _global
│           │   │       └── streams
│           │   │           ├── export
│           │   │           └── out
│           │   ├── copyResources
│           │   │   └── _global
│           │   │       └── streams
│           │   │           ├── copy-resources
│           │   │           └── out
│           │   ├── dependencyClasspath
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── export
│           │   ├── exportedProducts
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── export
│           │   ├── externalDependencyClasspath
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── export
│           │   ├── incOptions
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── out
│           │   ├── internalDependencyClasspath
│           │   │   └── _global
│           │   │       └── streams
│           │   │           ├── export
│           │   │           └── out
│           │   ├── managedClasspath
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── export
│           │   ├── scalacOptions
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── out
│           │   ├── unmanagedClasspath
│           │   │   └── _global
│           │   │       └── streams
│           │   │           ├── export
│           │   │           └── out
│           │   └── unmanagedJars
│           │       └── _global
│           │           └── streams
│           │               └── export
│           ├── it
│           │   ├── bloopGenerate
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── out
│           │   └── bloopPostGenerate
│           │       └── _global
│           │           └── streams
│           │               └── out
│           ├── runtime
│           │   ├── dependencyClasspath
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── export
│           │   ├── exportedProducts
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── export
│           │   ├── externalDependencyClasspath
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── export
│           │   ├── fullClasspath
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── export
│           │   ├── internalDependencyClasspath
│           │   │   └── _global
│           │   │       └── streams
│           │   │           ├── export
│           │   │           └── out
│           │   ├── managedClasspath
│           │   │   └── _global
│           │   │       └── streams
│           │   │           └── export
│           │   ├── unmanagedClasspath
│           │   │   └── _global
│           │   │       └── streams
│           │   │           ├── export
│           │   │           └── out
│           │   └── unmanagedJars
│           │       └── _global
│           │           └── streams
│           │               └── export
│           └── test
│               ├── bloopGenerate
│               │   └── _global
│               │       └── streams
│               │           └── out
│               └── bloopPostGenerate
│                   └── _global
│                       └── streams
│                           └── out
├── src
│   └── main
│       ├── java
│       └── scala
│           └── Main.scala
└── target
    ├── global-logging
    ├── scala-2.13
    │   ├── classes
    │   │   ├── HelloWorldScala$.class
    │   │   └── HelloWorldScala.class
    │   ├── update
    │   │   └── update_cache_2.13
    │   │       ├── inputs
    │   │       └── output
    │   └── zinc
    │       └── inc_compile_2.13.zip
    ├── streams
    │   ├── _global
    │   │   ├── _global
    │   │   │   └── _global
    │   │   │       └── streams
    │   │   │           └── out
    │   │   ├── csrConfiguration
    │   │   │   └── _global
    │   │   │       └── streams
    │   │   │           └── out
    │   │   ├── csrProject
    │   │   │   └── _global
    │   │   │       └── streams
    │   │   │           └── out
    │   │   ├── dependencyPositions
    │   │   │   └── _global
    │   │   │       └── streams
    │   │   │           └── update_cache_2.13
    │   │   │               ├── input_dsp
    │   │   │               └── output_dsp
    │   │   ├── ivyConfiguration
    │   │   │   └── _global
    │   │   │       └── streams
    │   │   │           └── out
    │   │   ├── ivySbt
    │   │   │   └── _global
    │   │   │       └── streams
    │   │   │           └── out
    │   │   ├── moduleSettings
    │   │   │   └── _global
    │   │   │       └── streams
    │   │   │           └── out
    │   │   ├── projectDescriptors
    │   │   │   └── _global
    │   │   │       └── streams
    │   │   │           └── out
    │   │   ├── scalaCompilerBridgeScope
    │   │   │   └── _global
    │   │   │       └── streams
    │   │   │           └── out
    │   │   └── update
    │   │       └── _global
    │   │           └── streams
    │   │               └── out
    │   └── compile
    │       ├── _global
    │       │   └── _global
    │       │       ├── compileOutputs
    │       │       │   └── previous
    │       │       └── discoveredMainClasses
    │       │           └── data
    │       ├── bloopAnalysisOut
    │       │   └── _global
    │       │       └── streams
    │       ├── bspReporter
    │       │   └── _global
    │       │       └── streams
    │       │           └── out
    │       ├── compile
    │       │   └── _global
    │       │       └── streams
    │       │           └── out
    │       ├── compileIncremental
    │       │   └── _global
    │       │       └── streams
    │       │           ├── export
    │       │           └── out
    │       ├── dependencyClasspath
    │       │   └── _global
    │       │       └── streams
    │       │           └── export
    │       ├── externalDependencyClasspath
    │       │   └── _global
    │       │       └── streams
    │       │           └── export
    │       ├── incOptions
    │       │   └── _global
    │       │       └── streams
    │       │           └── out
    │       ├── internalDependencyClasspath
    │       │   └── _global
    │       │       └── streams
    │       │           ├── export
    │       │           └── out
    │       ├── managedClasspath
    │       │   └── _global
    │       │       └── streams
    │       │           └── export
    │       ├── scalacOptions
    │       │   └── _global
    │       │       └── streams
    │       │           └── out
    │       ├── unmanagedClasspath
    │       │   └── _global
    │       │       └── streams
    │       │           ├── export
    │       │           └── out
    │       └── unmanagedJars
    │           └── _global
    │               └── streams
    │                   └── export
    └── task-temp-directory

330 directories, 142 files
```

# コンパイルされたプログラムの実行

プログラムを実行する。

```
$ sbt run
...
[info] running HelloWorldScala 
Hello World by Scala
[success] Total time: 1 s, completed 2021/07/13 8:38:46
```

無事実行された。