UbuntuでJDEEを自前でbuild

とりあえず今日のイライラ

  1. Emacsjava書きたい
  2. JDEEを入れるが古くて腐ってた
  3. Emacs23だったらSVNのtrunkから持ってきたほうがいいお!と書いてある
  4. svnでcheckoutしてbuildしようとしたらantが必要だった
  5. ant入れたはいいが特定のtaskでコケる
  6. ant-contrib入れたけどうごかねー(からなんとかした)
  7. 動いたけどまたコケる
  8. 欲しいtaskがcontribに入ってない(ここでキレかけた)
  9. 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のEmacsjdk入れてください。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が機能します。いや本当はclasspathbuild.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をsubversionchangelog処理用の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に入れて設定してください。設定とかは検索すればいっぱい出てきます(無責任)