UbuntuでJDEEを自前でbuild
とりあえず今日のイライラ
- Emacsでjava書きたい
- JDEEを入れるが古くて腐ってた
- Emacs23だったらSVNのtrunkから持ってきたほうがいいお!と書いてある
- svnでcheckoutしてbuildしようとしたらantが必要だった
- ant入れたはいいが特定のtaskでコケる
- ant-contrib入れたけどうごかねー(からなんとかした)
- 動いたけどまたコケる
- 欲しいtaskがcontribに入ってない(ここでキレかけた)
- svnでcheckoutしたtaskを入れてbuildした←イマココ
とりあえず環境
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 10.04.3 LTS Release: 10.04 Codename: lucid $ emacs -version GNU Emacs 23.1.1 $ java -version java version "1.6.0_20" OpenJDK Runtime Environment (IcedTea6 1.9.9) (6b20-1.9.9-0ubuntu1~10.04.2) OpenJDK 64-Bit Server VM (build 19.0-b09, mixed mode)
とりあえず流れ
まずJDKとかEmacsを入れます。UbuntuなのでpackageのEmacsとjdk入れてください。JDKはOpenJDKを入れてますがsun-javaでも多分大丈夫でしょう(未確認)。あとEmacs23は23.2からCEDETが標準装備されていますが、10.04(lucid)では23.1なのでこれもpackageから入れてください。
$ sudo aptitude install cedet-common cedet-contrib
11.04以降(natty)な人は多分Emacs23.2がdefaultになっているのでpackageにcedetは存在しません。なにせ標準ですから…あとelibも必要なので、これもpackageから入れます。
$ sudo aptitude install elib
これで準備完了
とりあえずant
antですが、これは1.8を入れました。lucidはdefaultでは1.7なので1.8用packageを入れてください。
$ aptitude search ant1.8 i ant1.8 p ant1.8-doc i A ant1.8-optional
で、これで万事うまくいく!…と思ったら甘かった
とりあえずcontrib
antでifやforのtaskを動かすにはant-contribが必須なのでinstallした訳ですが、このままでは何故か動きません。何故か?よくよく見てみるとantのclasspathであるはずの/usr/share/ant/libにant-contrib.jarが存在しません。ほぁ
$ ls -la total 12 drwxr-xr-x 2 root root 4096 2011-10-03 22:16 . drwxr-xr-x 5 root root 4096 2011-10-03 17:33 .. lrwxrwxrwx 1 root root 30 2011-10-03 17:33 ant-antlr.jar -> ../../java/ant-antlr-1.8.0.jar lrwxrwxrwx 1 root root 36 2011-10-03 17:33 ant-apache-bcel.jar -> ../../java/ant-apache-bcel-1.8.0.jar lrwxrwxrwx 1 root root 35 2011-10-03 17:33 ant-apache-bsf.jar -> ../../java/ant-apache-bsf-1.8.0.jar lrwxrwxrwx 1 root root 37 2011-10-03 17:33 ant-apache-log4j.jar -> ../../java/ant-apache-log4j-1.8.0.jar lrwxrwxrwx 1 root root 35 2011-10-03 17:33 ant-apache-oro.jar -> ../../java/ant-apache-oro-1.8.0.jar lrwxrwxrwx 1 root root 38 2011-10-03 17:33 ant-apache-regexp.jar -> ../../java/ant-apache-regexp-1.8.0.jar lrwxrwxrwx 1 root root 40 2011-10-03 17:33 ant-apache-resolver.jar -> ../../java/ant-apache-resolver-1.8.0.jar lrwxrwxrwx 1 root root 38 2011-10-03 17:33 ant-apache-xalan2.jar -> ../../java/ant-apache-xalan2-1.8.0.jar lrwxrwxrwx 1 root root 40 2011-10-03 17:33 ant-commons-logging.jar -> ../../java/ant-commons-logging-1.8.0.jar lrwxrwxrwx 1 root root 36 2011-10-03 17:33 ant-commons-net.jar -> ../../java/ant-commons-net-1.8.0.jar lrwxrwxrwx 1 root root 24 2011-10-03 17:33 ant.jar -> ../../java/ant-1.8.0.jar lrwxrwxrwx 1 root root 33 2011-10-03 17:33 ant-javamail.jar -> ../../java/ant-javamail-1.8.0.jar lrwxrwxrwx 1 root root 32 2011-10-03 17:33 ant-jdepend.jar -> ../../java/ant-jdepend-1.8.0.jar lrwxrwxrwx 1 root root 28 2011-10-03 17:33 ant-jmf.jar -> ../../java/ant-jmf-1.8.0.jar lrwxrwxrwx 1 root root 29 2011-10-03 17:33 ant-jsch.jar -> ../../java/ant-jsch-1.8.0.jar lrwxrwxrwx 1 root root 30 2011-10-03 17:33 ant-junit.jar -> ../../java/ant-junit-1.8.0.jar lrwxrwxrwx 1 root root 33 2011-10-03 17:33 ant-launcher.jar -> ../../java/ant-launcher-1.8.0.jar lrwxrwxrwx 1 root root 31 2011-10-03 17:33 ant-nodeps.jar -> ../../java/ant-nodeps-1.8.0.jar -rw-r--r-- 1 root root 2332 2010-04-10 01:43 ant-stylebook.jar lrwxrwxrwx 1 root root 22 2011-10-03 22:16 ant-svn.jar -> ../../java/ant-svn.jar lrwxrwxrwx 1 root root 30 2011-10-03 17:33 ant-swing.jar -> ../../java/ant-swing-1.8.0.jar lrwxrwxrwx 1 root root 29 2011-10-03 17:33 ant-trax.jar -> ../../java/ant-trax-1.8.0.jar
じゃあどこにあるのよ?という話ですがこれは他のリンクを見れば判りますが、/usr/share/javaに入ってます…うーん、よくわからんけど、入れるだけでいれでsym-linkすら貼ってくれないのはちょっと手抜きじゃないっすか!?と思ったわけですよ
$ ls -la | grep contrib -rw-r--r-- 1 root root 232180 2009-11-21 03:37 ant-contrib-1.0b3.jar lrwxrwxrwx 1 root root 21 2011-10-03 09:20 ant-contrib.jar -> ant-contrib-1.0b3.jar
なんで仕方ないので手でsym-linkを張ります
$ sudo ln -s ../../java/ant-contrib.jar ant-contrib.jar
これでant-contribが機能します。いや本当はclasspathをbuild.xmlに書いてもいいんですけど、いちいちめんどくさいしbuild.xmlには極力手を入れたくないというポリシー(?)ということにしておいてください。
とりあえずbuild
さて、これで万事準備が整った!JDEEのソースをcheckoutします
$ cd src $ svn co https://jdee.svn.sourceforge.net/svnroot/jdee/trunk jdee-trunk $ cd jdee-trunk/jdee $ ant configure <- build.propertiesを作成
build.propertiesを作成したら以下の箇所を編集します
cedet.dir=/usr/share/emacs/site-lisp/cedet-common <-cedetのホーム elib.dir=/usr/share/emacs/site-lisp/elib <-elibのホーム
それ以外はデフォでもokでしょう。変えたい人は適宜変更してください。んじゃまとりあえずbuildしてみます
$ ant build Buildfile: /home/misty/source/svn/jdee/trunk/jdee/build.xml init: prepare-lisp-build: configure: configure-ebuild: build-lisp: build-java: [javac] /home/misty/source/svn/jdee/trunk/jdee/build.xml: 162: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds build: BUILD SUCCESSFUL Total time: 0 seconds
お、いいっすね。次に行きます
$ ant bindist Buildfile: /home/misty/source/svn/jdee/trunk/jdee/build.xml init: prepare-lisp-build: configure: configure-ebuild: build-lisp: build-java: [javac] /home/misty/source/svn/jdee/trunk/jdee/build.xml: 162: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds build: bindist: BUILD SUCCESSFUL Total time: 1 second
はい、いいですね。なんかエラー出てますけどまあスルーで。じゃあpackageにして締めましょうか
$ ant package Buildfile: /home/misty/source/svn/jdee/trunk/jdee/build.xml <省略> BUILD FAILED /home/misty/source/svn/jdee/trunk/jdee/build.xml:210: Problem: failed to create task or type changelog Cause: The name is undefined. Action: Check the spelling. Action: Check that any custom tasks/types have been declared. Action: Check that any <presetdef>/<macrodef> declarations have taken place. Total time: 8 seconds
ギャース。changelogというtaskがねえよ!ボケが!ということですね。はて?なんでしょうね、このchangelog taskというのは
とりあえずantlib
実はこのchangelogというtaskは元々あるcvs用のtaskをsubversionのchangelog処理用のtaskとして使うラッパーライブラリのようです(本当?)実態はここにあります。このライブラリは、おまけ的な位置づけのようで、ubuntuのpackageには含まれていません(ここで時間使った(゚д゚)マズー)。まあ私はantはあまり使ったことが無いので「こんなの常識じゃん!」という話だったら聞かなかったことにしてください。
とりあえずこいつを入れないと全部すっきりbuildできないのでこいつを入れます。
$ svn co http://svn.apache.org/repos/asf/ant/antlibs/svn/trunk/ antlibs-svn $ cd antlibs-svn $ ant compile $ ant package <- jarファイルを作成する
さてこれでjarファイルができたので、所定の場所に突っ込んどきます
$ sudo cp build/lib/ant-svn-0.1-SNAPSHOT.jar /usr/share/java $ cd /usr/share/java $ sudo ln -s ant-svn-0.1-SNAPSHOT.jar ant-svn.jar
で、最後にantから見えるように
$ cd /usr/share/ant $ sudo ln -s ../../java/ant-svn.jar ant-svn.jar
これで完璧ですね。さっきのJDEEのソースディレクトリに戻ってbuildしてみましょう
$ ant package <省略> package: [tar] Building tar: /home/misty/source/svn/jdee/trunk/jdee/build/pkg/jdee-src-2.4.1.tar [zip] Building zip: /home/misty/source/svn/jdee/trunk/jdee/dist/pkg/jdee-src-2.4.1.zip [bzip2] Building: /home/misty/source/svn/jdee/trunk/jdee/dist/pkg/jdee-src-2.4.1.tar.bz2 [tar] Building tar: /home/misty/source/svn/jdee/trunk/jdee/build/pkg/jdee-bin-2.4.1.tar [zip] Building zip: /home/misty/source/svn/jdee/trunk/jdee/dist/pkg/jdee-bin-2.4.1.zip [bzip2] Building: /home/misty/source/svn/jdee/trunk/jdee/dist/pkg/jdee-bin-2.4.1.tar.bz2 BUILD SUCCESSFUL Total time: 29 seconds
はー、すっきり!あとはできたファイルで自前のEmacsに入れて設定してください。設定とかは検索すればいっぱい出てきます(無責任)