ここに書いてあることを手早く実行するには、15分で始めるScalaがおすすめです。(2013年1月)
Scalaのコンパイル、テストの実行にはsbt (Simple Build Tool) (全然simpleではないが!) を使うのが2012年現在でのbest practice. IDEではあまりコンパイルしない。
GitHub https://github.com/xerial/scala-cookbook/tree/min-project にすぐScalaの開発を始めるためのコードサンプルが置いてあります。
# min-projectブランチをmyprojectフォルダ内に取得
$ git clone git://github.com/xerial/scala-cookbook.git -b min-project myproject
$ cd myproject
# プロジェクトに必要なファイルをダウンロード、コンパイル、実行
$ bin/sbt run
bin/sbt sbtを実行するスクリプト (Windowsの場合は、sbt.bar)
bin/sbt-launch.jar sbt本体
src/main/scala Scala/Javaのソースコード置き場
src/main/resources プログラム中で必要なデータファイルなど
src/test/scala テストコード置き場
src/test/resources テスト時に必要なサンプルデータファイルなど
project/Build.scala プロジェクトの設定
project/Project.scala 配布可能なパッケージを作成する
project/build.sbt sbtのプラグインの設定
lib mavenなどで見つからないライブラリ(jar)の置き場
.gitignore gitで管理しないファイルの設定
project/Build.scala
import sbt._
import Keys._
object ProjectBuild extends Build {
lazy val root = Project(
id ="sample-project", // Set your project name here (artifact-id)
base = file("."),
settings =
Defaults.defaultSettings
++ Seq(PackageTask.packageDistTask)
++ PackageTask.distSettings
++ Seq(
scalaVersion := "2.9.2",
organization := "org.utgenome.sample", // groupidを設定
version := "1.0-SNAPSHOT",
scalacOptions ++= Seq("-encoding", "UTF-8", "-deprecation", "-unchecked"),
parallelExecution := true,
crossPaths := false,
libraryDependencies ++= Seq(
"org.codehaus.plexus" % "plexus-classworlds" % "2.4",
"org.scalatest" %% "scalatest" % "2.0.M1" % "test"
// Add other libraries here
)
)
)
}
libraryDependencies
に追加例:sqlite-jdbc (SQLiteデータベースをJava/Scalaで使うライブラリ)を追加
libraryDependencies ++= Seq(
(他のライブラリ...),
"org.xerial" % "sqlite-jdbc" % "3.7.2"
)
$ bin/sbt gen-idea
ライブラリの追加を行うごとにこのコマンドを実行するとよい。IntelliJでプロジェクトのリロードが必要になる。
$ bin/sbt publish-local
$HOME/.ivy2/local/(group id)/(artifact id)-(version)
以下に、コードライブラリ(jar, javadoc, source codeのjarなど)が作成される。作成されたものにテストコードは含まれない。
group idは、自分の持っているドメイン名に対応するものを使うのが慣習。utgenome.org
を保有しているなら、org.utgenome
がgroup id。
$ bin/sbt package-dist を実行すると、target/distフォルダ内にそのまま配布できる形のプログラムができあがる。
target/dist
の中身は以下のようになっている。
bin/launch 実行用スクリプト
bin/classworld.conf classworldの設定ファイル。どのmain関数を呼ぶか、
どのフォルダのライブラリを使うかが記述されている。
lib/scala-library.jar scalaのlibrary本体
lib/classworld-2.4.jar 各種jarファイルを読み込むためのライブラリ。
launchから呼び出される。
lib/sample-project-1.0-SNAPSHOT.jar
作成したプログラム
VERSION プログラムのversion情報が書かれている
bin/launch
、bin/classworld.conf
は、src/script
以下に含まれている。プログラムの名前を変更したい場合は、 src/script/launch
をsrc/script/(your program name)
などに変更すること。プログラムのエントリポイント(main関数の場所)を変更するには、src/script/classworld.conf
の内容を変更するとよい。