読者です 読者をやめる 読者になる 読者になる

望月いちろうのREADME.md

書き溜めておいた技術記事や旅行記のバックアップです。

Scalaの開発環境 基本編 - SBT入門 - SBTのディレクトリ構成について

Scala

Scalaのプロジェクト管理ツール SBT のディレクトリ構成について解説します。

base/
build.sbt

src/
    main/
       resources/
       scala/
       java/
   test/
       resources/
       scala/
       java/
lib/
project/
   build.scala

--- 以下は自動生成 ---
target/

build.sbt

SBTのプロジェクト管理の中心になる設定ファイル

src/main

プロジェクトで利用するソースコードを画像やテキストなどのデータアセットなどをここに集約する。

resources

プロジェクトで利用する画像や動画、テキストデータなどのデータファイルをここに格納する。ソースコードからここのデータを利用するにはgetClassオブジェクトからgetResourceを利用するとよいでしょう 。 resourcesフォルダ内のdata.xmlを取得する例

import scala.io.Source
val source = Source.fromURL(getClass.getResource("/test,jpg"))

パスを取得したい場合はgetPathをつづけます。

getClass.getResource("/test.jpg").getPath

scala

scalaのソースファイルを配置するディレクトリです。ここに配置するscalaのソースコードは少なくとも1つはmain関数を含むオブジェクトを持ったソースファイルを配置しなければならない。もしsbtはmain関数を配置したオブジェクトを自動で検知して実行する。もし複数のmain関数を持ったオブジェクトを配置する場合は、sbtに以下のような形式でメインのクラスをしていする必要がある。

mainClass := Some("Main")

もし特定のコマンドに対してメインのクラスをしていする場合は以下の書式を参考にする。

mainClass in (Compile, run) := Some("Main")

test

テストコードとテストに利用するデータファイルを格納する。

lib

jarファイルを直接このlibディレクトリに配置することで、そのsrc以下のソースコードで外部のパッケージを利用することができるようになる。 注意すべきなのは、このlib以下のjarが利用されるのはcompile,run,testの場合のみであり、packageを利用してjarを作成した時にはパッケージには利用されない。
jarファイルにこのlib以下のパッケージを同梱したい場合はsbtプラグインのassemblyを利用するとよい。

通常は外部パッケージの読み込みはsbtのlibraryDependenciesの設定によって自動的に依存関係を解決するのが得策で、手動でダウンロードしてlibに配置するのは、どうしてもunresolved dependenciesエラーが解決できない場合や、マイナー、あるいは自作したパッケージを利用する場合に止めるべきである。

target

コンパイル済みのコードなどが生成される