Jikes RVMのインストール


Jikes RVM(http://jikesrvm.org/)なんていうVMがあるんですね。
元々はIBMが開発していたものだそうで、

簡単にいえば「すごくいじりやすいVM」かな。
JikesRVMで「Hello World」- I am Cruby!

なんだとか。
さくっとインストールしてしまうつもりが、かなり手こずってしまったのでエントリーとして備忘録を。


今回の環境について

  • Ubuntu 12.04.02 LST (x86_64)
  • Jikes RVM 3.1.3+hg

環境の準備

Jikes RVMを入れる際に必要となるパッケージを入れておきます。

インストール

Jikesのサイトからソースコードを持ってきてもいいんですが、管理が楽になるようにMercurialというバージョン管理システムを利用してソースコードを落としてきます。

$ hg clone http://hg.code.sourceforge.net/p/jikesrvm/code jikesrvm

落としてきたディレクトリの中に移動します。

$ cd jikesrvm

次に、ソースコードをビルドするための設定ファイルとして".ant.properties"というファイルを"jikesrvm"ディレクトリ内に作成し以下の内容を記述します。

## "$ uname -m"等で自身の環境を確認し指定します。 ex.ia32-linux, ppc32-linux, x86_64-linux
host.name=x86_64-linux
## ビルドを行う構成を選択します。詳しくは公式のリファレンスを…。 ex.prototype, prototype-opt, development, production
config.name=development

ビルドを行います。sudoはあまり褒められたやり方ではないですね。はい。

$ sudo ant


問題なくビルドが通れば、"jikesrvm/dist/"というディレクトリが作成され、このディレクトリ内に"jikesrvm/dist/development_x86_64-linux/rvm"が作成されていると思います。確認してみましょう。

$ ./rvm -version
development Jikes RVM 3.1.3+hg (revision f24912e3a27ec636e2874889f053844c0937a429)

Hello World!!

定番のHello World!!もやっておきましょう。
HelloWorld.javaとファイルを作成し、以下の内容を記述します。

public class HelloWorld {
  public static void main (String[] args) {
    System.out.println("Hello World !!");
  }
}

コンパイル、実行してみましょう。

$ javac HelloWorld.java
$ ./rvm HelloWorld
Hello World !!


ただし、ここで注意が必要なのですがjava 7でコンパイルを行うと以下のようなエラーが出ました。
6に切り替えコンパイル、実行だと問題ないんですけどね。

./rvm HelloWorld
Exception in thread "MainThread" java.lang.UnsupportedClassVersionError: unsupported class file version 51.0
at org.jikesrvm.classloader.ClassFileReader.readConstantPool(ClassFileReader.java:58)
at org.jikesrvm.classloader.ClassFileReader.readClass(ClassFileReader.java:353)
at org.jikesrvm.classloader.RVMClassLoader.defineClassInternal(RVMClassLoader.java:336)
at org.jikesrvm.classloader.RVMClassLoader.defineClassInternal(RVMClassLoader.java:307)
at java.lang.VMClassLoader.defineClass(VMClassLoader.java:99)
at java.lang.VMClassLoader.defineClassWithTransformers(VMClassLoader.java:323)
at java.lang.ClassLoader.defineClass(ClassLoader.java:471)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:83)
at java.net.URLClassLoader.findClass(URLClassLoader.java:617)
at java.lang.ClassLoader.loadClass(ClassLoader.java:341)
at java.lang.ClassLoader.loadClass(ClassLoader.java:293)
at org.jikesrvm.classloader.TypeReference.resolveInternal(TypeReference.java:811)
at org.jikesrvm.classloader.TypeReference.resolve(TypeReference.java:799)

おわりに

弄りやすいVMということなんですが、入れるだけでも手こずってしまっている私。
諦めずに引き続きもう少し触って行きたいと思います。