ラベル scala の投稿を表示しています。 すべての投稿を表示
ラベル scala の投稿を表示しています。 すべての投稿を表示

2010年8月22日日曜日

Scalaコードの強調表示定義ファイルの所在

Scalaのソースコードを編集する際に便利な、各種テキスト・エディタ向けの強調表示の定義ファイルの所在について、備忘録。
どこで見たのか忘れてしまった…というか確認作業が面倒なのでしないだけなのだけど、ともかく誰かさんのおかげで知りました。

Scala公式サイトで配布されている圧縮ファイルを展開してできたフォルダの、
scala-(バージョン・ナンバー).final > misc > scala-tool-support
に、VimやらEmacsやらNotepad++やら何やらかんやら、ともかく諸種ツールの名前のフォルダがあります。

Windows環境の場合、インストーラーをダウンロードして、手もとのPCにインストールする、ということもできます。その場合も、同じように、
C:\Program Files\scala\misc\scala-tool-support
などのフォルダをのぞくと、見つかります。

たとえばNotepad++向けのフォルダは「notepad-plus」で、この中にしまわれているXMLファイルを、Notepad++のインストール・ディレクトリか、
C:\Users\(ユーザー名)\AppData\Roaming\Notepad++
などにコピーすると(Windows 7の場合)、Scalaソースコード向けの強調表示ができるようになります。







2010年8月21日土曜日

Scalaを単体で実行可能なJarファイルにまとめる

【注】この記事の記述にはまちがいがありました。紹介されている参考記事の記述のうち、不要だったのは、マニフェストファイルでのクラスパス(Class-Path)の記述であって、scala-library.jarの展開は必須でした。

Scalaソースコードを、Javaクラスファイルにコンパイルしたあと、Scalaがインストールされていない環境でも(Java実行環境があれば)単体で実行可能なJarファイルにまとめる手順について。

jarコマンドとか、classpathとかそのへんすごい苦手なので、備忘録。
おおむね下記サイトに掲載されている通りでも問題ない。

■ScalaをJar化してみるComments - ゲーム作ろうよ
http://d.hatena.ne.jp/mitsu_chie/20100719/1279552867

だけど、要らない手順も含まれていたので、整理しておく。

1. Scalaソースコードを作成

ともかくmainメソッドを持つobject(シングルトンクラス)があればよいよね。
例えば、

HelloWorld.scala
object HelloWorld {
    def main (args: Array[String]): Unit = println("Hello world!")
}
とか。


2. scalacコマンドでJavaクラスファイルに変換

コマンドラインで、作成したScalaソースコード・ファイルを指定して
scalac HelloWorld.scala
この段階で、
scala HelloWorld
とコマンドを打てば、「Hello world!」とか表示されるはず。

3. scala-library.jarを用意する

scala-library.jarは、Scalaのインストール・ディレクトリに含まれる。
jarコマンドに長々とパスを指定したりしたくないので、scala-library.jarをコピーして、
Scalaソースコードと同じディレクトリにコピーする。


コマンドプロンプトで、
jar xf scala-library.jar
を実行して、scala-library.jarを展開する。結果的にフォルダ内にはscalaフォルダが新たに作られる。



4. マニフェスト・ファイルを作成

作成する実行可能Jarファイルの、実行時の設定を指定するため、マニフェスト・ファイルを用意する。

マニフェスト・ファイルでは、mainメソッドを持つクラス名(Scalaコード的にはobjectとして作ったもの)の名称と、Scalaコードから生成したクラスファイルを実行するために必要な、Scala APIのクラスを探索するクラスパスを指定する。

例えば、
manifest.mf
Manifest-Version: 1.0
Main-Class: HelloWorld
Class-Path: scala-library.jar
とか。
このファイルも便宜上、Scalaソースコードと同じディレクトリに 保存。

5. jarコマンドでアーカイブ

jarコマンドのオプションとして、

c(Jarファイルをつくるよ)
f(作成するJarファイル名を指定するよ)
m(マニフェスト・ファイルもあるよ)

を与え、
さらに、作成するJarファイルの名前と、作成したマニフェスト・ファイル名を指定。
最後に、新たにJarファイルとしてまとめることになるJavaクラスファイルやJarファイルを指定。

例えば、
jar cfm HelloWorld.jar manifest.mf *.class scala-library.jar
となる。
これで、このディレクトリ内のすべてのJavaクラスファイルと、scala-library.jarがまとめられてJarファイルHelloWorld.jarになる。
java -jar HelloWorld.jar
などとコマンドを打てば、「Hello world!」とか表示される。
Scalaコード内で呼び出しているScala APIによっては、jarコマンド末尾のアーカイブ化対象クラスファイルやJarファイルの一覧がながーくなっていくものと思われる。

2010年5月2日日曜日

Scala開発用Eclipseプラグインのバグ

最近、JVMを基盤にして動く関数型言語Scalaを勉強しはじめた。
インタラクティブにコードを実行できるツールが提供されているあたりが、とてもありがたい。
プロンプトの表示に若干バグがあるのが気になるけど…

それでScala開発用のEclipseプラグインSDT(Scala Development Tools)も提供されていたので、さっそく入れてみた。いや、実のところいままでJavaで作ってきたプログラムを、部分的にでもScala化できればという考えもあって…。

しかしこのプラグインはかなり使いづらく、かつバグっている。
  • プロジェクトビューでScalaプロジェクトを選択した状態では、「実行」メニューにも、「実行」ボタンにも、コンテクストメニューの「実行」にも、「Scala Application」が表示されない。ソースコードファイルそのものを選択している状態でないといけない。
  • ソースコードエディタに関しては、入力をアシストする機能はない。あるのはキーワードの強調表示だけ。
  • 自動インデントの単位はEclipse一般の設定を無視して、半角スペース2つで固定。
  • コンパイルがうまくいかず、「java.lang.NoSuchMethodError: main」などとエラーが表示されたりする(アンインストール→再インストールでなんとか解決)