Debianでもclojureじゃー
FreeBSDでclojureが動いた事だし、Linuxでは動く事が確実であろうから、debian
での動作確認はやめておこうかと思った。 けど、実際に動く事をこの目で確かめ
ないと気が済まぬもう一人の自分の後押しがあったので、やってみる事にする。
Debianなら、OOoの関係できっとJREぐらいは入っているに違いない。
確認してみよう。
sakae@debian:~$ java -version
java version "1.5.0"
gij (GNU libgcj) version 4.3.2
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
これって、gccグループのやつですね。
以前、用があってFreeBSDで gcc-4.3.X をコンパイルした時、javaのライブラリィー
作成の関係で大量のメモリーを要求され、難儀した事をふと思い出した。
どこ製のやつでも動けば官軍、早速動かしてみよう。試したやつは、Windowsから
持ってきたやつだ。
sakae@debian:~/clj$ java -jar clojure.jar
Exception in thread "main" java.lang.NoClassDefFoundError: clojure.main
at java.lang.Class.initializeClass(libgcj.so.90)
Caused by: java.lang.VerifyError: verification failed at PC 23 in clojure.main:hashCode(()I): incompatible type on stack
at java.lang.Class.initializeClass(libgcj.so.90)
ははは、やってみるものだねぇ。動かんじゃないか。
gijはきっぱり諦める事にして、Debianは、どんなJavaが使えるのだろう?
root@debian:~# apt-cache search java
ant - Java based build tool like make
ant-doc - Java based build tool like make - API documentation and manual
:
default-jdk - Standard Java or Java compatible Development Kit
default-jdk-builddep - Standard Java or Java compatible build dependencies
default-jre - Standard Java or Java compatible Runtime
:
ecj - standalone version of the Eclipse Java compiler
ecj-gcj - standalone version of the Eclipse Java compiler (native version)
:
sun-java6-jdk - Sun Java(TM) Development Kit (JDK) 6
sun-java6-jre - Sun Java(TM) Runtime Environment (JRE) 6 (architecture independe
nt files)
sun-java6-plugin - The Java(TM) Plug-in, Java SE 6
何がなんだか分からんので、純正を入れておくか。
Sunと言えばSparcだけど、作っているのは富士通と言うのは有名な話だし
JVMと言うプロセッサーぐらいしか、Sunは作ってないもんねぇ。そのJVMに
敬意を表しておこう! jreにしようかjdkにしようかと迷う所であるが、
今となっては、WindowsにもJava開発環境が無い事だし、Debianに入れて
おくのも、良い選択かなと。
oot@debian:~# apt-get install sun-java6-jdk
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
gsfonts-x11 sun-java6-bin sun-java6-jre
Suggested packages:
sun-java6-demo sun-java6-doc sun-java6-source sun-java6-plugin
ia32-sun-java6-plugin sun-java6-fonts ttf-baekmuk ttf-unfonts
ttf-unfonts-core ttf-arphic-uming
The following NEW packages will be installed:
gsfonts-x11 sun-java6-bin sun-java6-jdk sun-java6-jre
0 upgraded, 4 newly installed, 0 to remove and 1 not upgraded.
Need to get 52.2MB of archives.
After this operation, 156MB of additional disk space will be used.
しばし待たれい!
再び、java -version すると、GNUのjavaになっているよ。切り替え機が
あって切り替えられるのかなぁ?
Webで調べるのも面倒なので、実機を現場検証。そしたら、切り替え場所が
判明した。/etc/alternatives/ 以下にリンク集があるのね。
root@debian:/etc/alternatives# ls -l java javac
lrwxrwxrwx 1 root root 34 Mar 19 11:54 java -> /usr/lib/jvm/java-gcj/jre/bin/java*
lrwxrwxrwx 1 root root 33 Mar 19 11:54 javac -> /usr/lib/jvm/java-6-sun/bin/javac*
強引に切り替えちゃった。(あくまで、事故責任ですよ!)
lrwxrwxrwx 1 root root 45 Mar 19 12:05 java -> /usr/lib/jvm/java-6-sun-1.6.0.12/jre/bin/java*
これで、clojureが普通に動くようになりました。
ここで終わってしまっては、つまらないので、今度は、clojure を組み立てて
みよう。そう、clojureのメインページに、svnへの案内が出ているので、
開発版を取ってきて、組み立てるんだ。jdkを折角入れた事だし、後はJava用の
Makeシステムである ant を用意するだけで、簡単に試せる。
sakae@debian:~/clojure-dev$ ant
Buildfile: build.xml
clean:
init:
[mkdir] Created dir: /home/sakae/clojure-dev/classes
compile-java:
[javac] Compiling 119 source files to /home/sakae/clojure-dev/classes
[javac] Note: Some input files use unchecked or unsafe operations.
[javac] Note: Recompile with -Xlint:unchecked for details.
compile-clojure:
[java] Compiling clojure.core to /home/sakae/clojure-dev/classes
[java] Compiling clojure.main to /home/sakae/clojure-dev/classes
[java] Compiling clojure.set to /home/sakae/clojure-dev/classes
[java] Compiling clojure.xml to /home/sakae/clojure-dev/classes
[java] Compiling clojure.zip to /home/sakae/clojure-dev/classes
[java] Compiling clojure.inspector to /home/sakae/clojure-dev/classes
clojure:
[jar] Building jar: /home/sakae/clojure-dev/clojure.jar
clojure-slim:
[jar] Building jar: /home/sakae/clojure-dev/clojure-slim.jar
clojure-sources:
[jar] Building jar: /home/sakae/clojure-dev/clojure-sources.jar
all:
BUILD SUCCESSFUL
Total time: 1 minute 32 seconds
早速、どんな具合に出来上がったか確認してみよう。
sakae@debian:~/clojure-dev$ ls -ltr
total 2316
drwxr-xr-x 5 sakae sakae 4096 Mar 19 08:36 src/
-rw-r--r-- 1 sakae sakae 2309 Mar 19 08:36 readme.txt
-rw-r--r-- 1 sakae sakae 803 Mar 19 08:36 pom.xml
-rw-r--r-- 1 sakae sakae 12917 Mar 19 08:36 epl-v10.html
-rw-r--r-- 1 sakae sakae 1484 Mar 19 08:36 clojure.iml
-rw-r--r-- 1 sakae sakae 4179 Mar 19 08:36 build.xml
drwxr-xr-x 3 sakae sakae 4096 Mar 19 12:17 classes/
-rw-r--r-- 1 sakae sakae 1487712 Mar 19 12:19 clojure.jar
-rw-r--r-- 1 sakae sakae 536475 Mar 19 12:19 clojure-slim.jar
-rw-r--r-- 1 sakae sakae 283890 Mar 19 12:19 clojure-sources.jar
スリムな版も出来上がっているぞ。標準版とは、どんな違いがあるのだろう?
jarファイルは、zipファイルなので、超いいかげんに、下記のような方法で
確認してみる。
sakae@debian:~/clojure-dev$ unzip -Z clojure.jar > A
sakae@debian:~/clojure-dev$ unzip -Z clojure-slim.jar > a
sakae@debian:~/clojure-dev$ diff -u A a
--- A 2009-03-19 12:31:56.000000000 +0900
+++ a 2009-03-19 12:32:11.000000000 +0900
@@ -1,18 +1,9 @@
-Archive: clojure.jar 1487712 bytes 1235 files
+Archive: clojure-slim.jar 536475 bytes 315 files
drwxr-xr-x 2.0 unx 0 bx stor 19-Mar-09 12:19 META-INF/
--rw-r--r-- 2.0 unx 143 b- defN 19-Mar-09 12:18 META-INF/MANIFEST.MF
+-rw-r--r-- 2.0 unx 143 b- defN 19-Mar-09 12:19 META-INF/MANIFEST.MF
drwxr-xr-x 2.0 unx 0 b- stor 19-Mar-09 12:18 clojure/
drwxr-xr-x 2.0 unx 0 b- stor 19-Mar-09 12:18 clojure/asm/
drwxr-xr-x 2.0 unx 0 b- stor 19-Mar-09 12:18 clojure/asm/commons/
-drwxr-xr-x 2.0 unx 0 b- stor 19-Mar-09 12:18 clojure/lang/
-drwxr-xr-x 2.0 unx 0 b- stor 19-Mar-09 12:18 clojure/proxy/
-drwxr-xr-x 2.0 unx 0 b- stor 19-Mar-09 12:18 clojure/proxy/clojure/
-drwxr-xr-x 2.0 unx 0 b- stor 19-Mar-09 12:18 clojure/proxy/clojure/lang/
-drwxr-xr-x 2.0 unx 0 b- stor 19-Mar-09 12:18 clojure/proxy/java/
-drwxr-xr-x 2.0 unx 0 b- stor 19-Mar-09 12:18 clojure/proxy/java/lang/
-drwxr-xr-x 2.0 unx 0 b- stor 19-Mar-09 12:18 clojure/proxy/javax/
-drwxr-xr-x 2.0 unx 0 b- stor 19-Mar-09 12:18 clojure/proxy/javax/swing/
-drwxr-xr-x 2.0 unx 0 b- stor 19-Mar-09 12:18 clojure/proxy/javax/swing/table/
:
ざっと見、GUIを使わない時は、スリム版でいいみたい。違うかな?
S式を超複雑にした、build.xml を見ると、
(target name="clojure-slim" depends="compile-java"
description="Create clojure-slim jar file (omits compiled Clojure code)")
ちょっと気になるコメントが書かれているなあ。