Scalaのバージョンを簡単に切り替えられる"svm"ってヤツ作った (冷やし中華終わりました)
まぁタイトルの通りなんですが(冷やし中華は終わってます)、RubyだったらrvmとかPythonだったらvirtualenvとか、使うバージョン切り替えられるヤツあんじゃないスカ?
Scalaでもあったらいーなーと思ってシェルスクリプトで書きました。Scalaの場合は、依存ライブラリをランタイムのバージョン毎に切り替える必要はないので、単純にSCALA_HOMEを切り替えれば事足りるってー訳で。
ここに置いてあります。
この前trunkに入ったDynamic typeの調査をするはずが、何故かシェルスクリプトを書き始めていた……。何を言って(ry
概要
インストールされてるScalaのバージョンを切り替えたり、指定したバージョンをダウンロードしてきたりできます。
こいつを使えば、気軽にnightly buildを試したり、stableに戻ったり、新しいリリースを素早くインスコできたりするって寸法でさぁ。
設定
シェルスクリプト(svm)を落としてきたらPATHが通ってるとこに配置して実行権限をつけてください。
あと、環境変数PATHに、"$HOME/.svm/current/rt/bin"を追加しておいてください。
export SCALA_HOME=~/.svm/current/rt export PATH=$SCALA_HOME/bin:$PATH
readlinkを使ってるのでcoreutilsが必要です。macportとかhomebrewで入れておいてください(ってかふつー入ってるよね?)
svmでは、"$HOME/.svm"以下にversion毎にディレクトリを作成して、Scalaのバージョンを配置します。カレントのバージョンは、"$HOME/.svm/current"というシンボリックリンクによって、対象バージョンのディレクトリを指すようにすることで設定されます。
ようは、こんなディレクトリ構成なわけです。
ozaki@mbp $ ls ~/.svm total 8 drwxr-xr-x 7 ozaki staff 238 1 21 20:28 . drwxr-xr-x 169 ozaki staff 5746 1 21 20:28 .. lrwxr-xr-x 1 ozaki staff 30 1 21 20:28 current -> /Users/ozaki/.svm/scala-latest drwxr-xr-x 5 ozaki staff 170 1 21 19:54 scala-2.8.1.RC1 drwxr-xr-x 3 ozaki staff 102 1 21 19:59 scala-2.8.1.RC2 drwxr-xr-x 5 ozaki staff 170 1 21 20:17 scala-2.8.1.final drwxr-xr-x 5 ozaki staff 170 1 21 20:28 scala-latest
各バージョンのディレクトリ以下には、3つのディレクトリがあります。
- rt : ランタイムが配置される
- devel-doc : ScalaDocが配置される
- sources : SDKのソースファイルが配置される
すでにインストールされているScalaをsvm管理下に置きたい場合は、上記のディレクトリ構成に従って配置すればおけです。
使い方
svm helpってやってもらえば大体わかるわけですが。
ozaki@mbp $ svm help Usage : svm [Action] [Scala-Version] [Options] Action : -h|help - show this usage information -c|current - show the currently use scala version -l|list|versions - show the scala version installed in svm_path(default is /Users/ozaki/.svm) -i|install - install specific scala version -r|remove|uninstall - uninstall specific scala version and remove their documents and sources -s|switch|-u|use - setup to use a specific scala version update-latest - install or update nightly build scala version latest - setup to use nightly build scala version stable - setup to use stable(x.x.x.final) scala version (any strings) - setup to use specific scala version(shortcut of svm switch) Options : --no-docs - with install, update-latest.skip to download scala-devel-docs. --no-sources - with install, update-latest.skip to download scala-sources.
"svm install 2.8.1.final"とやると、.svm以下にscala2.8.1.finalをダウンロードして来ます。ダウンロードが終わったらこいつをcurrentのversionに設定するか聞かれるのでお好みで設定して。
ozaki@mbp $ svm install 2.8.1.final Trying to installing version of 2.8.1.final. in /Users/ozaki/.svm/scala-2.8.1.final --2011-01-21 18:58:53-- http://www.scala-lang.org/downloads/distrib/files/scala-2.8.1.final.tgz Resolving www.scala-lang.org... 128.178.154.159 Connecting to www.scala-lang.org|128.178.154.159|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 20203153 (19M) [application/x-gzip] Saving to: `scala-2.8.1.final.tgz' 100%[===================================================================================================================================================>] 20,203,153 124K/s in 3m 19s 2011-01-21 19:02:13 (98.9 KB/s) - `scala-2.8.1.final.tgz' saved [20203153/20203153] ... Successfully installed version of 2.8.1.final. installed directory is /Users/ozaki/.svm/scala-2.8.1.final Do you want to change current runtime version to 2.8.1.final? y/N: y currently version is 2.8.1.final.
"svm current"で現在使用してるversionを表示します。
ozaki@mbp $ svm current currently version is /Users/ozaki/.svm/2.8.1.final
"svm 2.8.1.RC1"のようにバージョン番号を指定すると、そのバージョンに切り替えます。指定したバージョンが無い場合はダウンロードに行くか聞いてきます。
ozaki@mbp $ svm 2.8.1.RC1 currently version is 2.8.1.RC1 ozaki@mbp $ scala Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8 Welcome to Scala version 2.8.1.RC1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_22). Type in expressions to have them evaluated. Type :help for more information. scala>
"svm stable"とやると、インストールされてる中で最新の安定バージョンに切り替わります。
ozaki@mbp $ svm stable currently version is 2.8.1.final
"svm update-latest"は、nightly-buildをダウンロードします。既にダウンロードされてる場合は最新のものに置き換えます。
ozaki@mbp $ svm update-latest in /Users/ozaki/.svm/scala-latest --2011-01-21 20:04:22-- http://www.scala-lang.org/archives/downloads/distrib/files/nightly/distributions/scala-2.9.0.latest.tgz Resolving www.scala-lang.org... 128.178.154.159 Connecting to www.scala-lang.org|128.178.154.159|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 43338980 (41M) [application/x-gzip] Saving to: `scala-2.9.0.latest.tgz' ...
"svm uninstall 2.8.1.RC1"でディスクから消し去ります。あばばばばばばばば。
"svm list"または"svm versions"で、インストールされているバージョンを表示します。
ozaki@mbp $ svm list 2.7.1.final 2.7.3.final 2.7.4.final 2.7.5.final 2.7.6.final 2.7.7.final 2.7.7.RC2 2.8.0.Beta1-prerelease 2.8.0.Beta1-RC2 2.8.0.final 2.8.0.latest 2.8.0.RC1 2.8.0.RC2 2.8.0.RC3 2.8.0.RC5 2.8.0.RC6 2.8.0.RC7 2.8.1.final 2.8.1.RC 2.8.1.RC1 2.8.1.RC2 2.8.1.RC4 2.8.8.RC5 latest currently version is /Users/ozaki/.svm/latest
だいたいこんなところですわ。なんかバグ見つけたらレポートしてくれたりパッチくれたりpull-requestくれたりするとありがたいです。