「はじめてのScala」著者によるサポートページ

工学社刊「はじめてのScala」の、著者によるサポートページです。書籍中で書ききれなかったことを書いていきたいと思います。

続・IzPackインストーラのバグ回避について
scalaコマンドで「スクリプト形式」が動かない?

続・IzPackインストーラのバグ回避について

Scala-2.7.7では「IzPack」というダブルクリック式のインストーラがついています。ユーザだけでなく説明するのも大変便利なのですが、イマイチバグがあります。

本書の巻末にも、「IzPack」で自動でやってくれるはずの「環境変数の設定」が失敗するバグについて紹介してあります。
加えて、Windowsの64bit(のJavaの64bit)版でも、インストールの途中でエラーになるようです。

症状は以下の通りです。インストーラ画面に

ERROR You have not installed the DLL named 'ICE_JNIRegistry.DLL'.
C:\scala\Uninstaller\ICE_JNIRegistry.dll: .............
というようなメッセージが表示され、先に進めなくなります。

これは、あまり問題ありません。実は、「アンインストーラをインストールできない」という、なんかフザケてんじゃないかという印象を受けてしまいますが、そういうエラーなのです。

Scala自体はちゃんとインストールされています。ただし、Scalaのインストールフォルダ及び実行フォルダのパスが環境変数に自動設定されないうちに、インストーラを強制終了してしまうことになります。ですから、この作業を自分でする必要があります。

Windowsにおける環境変数の設定方法は、本書巻末にも説明してありますが、筆者の別のサポートページにも書いてありますのでお役立てください。

設定する環境変数は以下の通りです。

scalaコマンドで「スクリプト形式」が動かない?

スクリプト形式で書いた「nantoka.scala」のようなファイルを、以下のようなコマンドで動かそうとしたとき....
scala nantoka.scala
こんなエラーが出て実行できないことはありませんか。
Connection Reset
これは、「ファイアーウォール」か、あるいは他の「サービス」と「ポートが競合」しているかが原因のようです。
なぜプログラミング言語にネットワークがからむのか!?...その根拠は「スクリプト形式」特有の問題です。

「スクリプト形式」は、書かれたファイルの内容をそのたびに読んで、コンパイルして実行します。それは遅いので、最近のScalaでは「コンパイルデーモン」というサービスが常駐しており、言うなれば「一度立ち上がったコンパイラはそのまま立ち上がりっぱなし」の状態になっているのです。「スクリプト形式」の実行では、このサービスに接続して処理をしてもらうのですが、これになんらかの接続障害が起きているのです。Mac OS Xでファイアーウォールの問題が報告されています。
とりあえず、scalaコマンドで「スクリプト形式」の実行を行う場合に以下のようなコマンドオプションを使うと、このエラーは回避できます。

scalac -nocompdaemon nantoka.scala
なお、scalacコマンドでコンパイルしたクラスをscalaコマンドで実行する場合は、このエラーは起こらないと思います。