2014/02/06

Confluenceをソースコードからビルドしたい

ライセンスを持っていればソースコードも入手できるConfluenceさん、
https://developer.atlassian.com/display/CONFDEV/Building+Confluence+From+Source+Code 
にドキュメントがあるんですが、この通りやっても全然ビルドできません。ページの下の方のコメント欄にいっぱい寄せられているように、BUILD FAILUREの残念なおしらせで止まりまくります。

(数ヶ月前一回トライしてギブした後)Linuxで何日かかけてやっとビルド完走したので、ここに書いておきます(社内のConfluenceにも書いたけど)。ただ幾らネットで調べても日本語の情報が無いのと英語でも私がたどりついた正解が載っていないので、必要性がないのか常識なのかどちかの可能性が高いです。なお、後述しますが、Windows版ではビルドできませんでした。

さて、上記ドキュメントに、ソースコードを展開した後、「javamail が同梱されてないから、mavenコマンドでインストールせよ」とあります。あるんですが、とりあえず、build.sh を走らせてみましょう。止まりましたよね。

プロキシの設定


プロキシを越えないとインターネットにアクセスできない環境では、maven にプロキシの設定を施す必要がありますが、まずここでハマりました。mavenは同梱してあり(よくわからないがConfluenceの最新版でも二つのバージョンのmavenが同梱されている)、ソースを展開したディレクトリの中の

maven3/apache-maven-3.x.x/conf/settings.xml
maven2/apache-maven-2.x.x/conf/settings.xml

の設定ファイルをそれぞれ編集します。proxy のところのコメントを外して設定項目を書きます。さて、http と https の二つプロトコルを書きたいんだけど、二つ書いても有効になりません。よって、http だけここに書いておいて、

それぞれのバージョンの bin/mvn を開いて、最初の方に、

export MAVEN_OPTS="-Dhttps.proxyHost=xx.xx.xx.xx -Dhttps.proxyPort=8080"

という感じに追記。(参考)http://d.hatena.ne.jp/takezoe/20110102/p2

javamail のインストール


これで、javamailをインストールしますが、プロキシが効いてるかの確認も含めて一回、build.sh を走らせてコケてみた方がいいです。javamilのどのバージョンがないか見るためです。要求されているバージョンのjavamailをoracleから貰ってきます。

1.3.3だったので、http://www.oracle.com/technetwork/java/javamail-1-3-3-137201.html から。たぶんOracleのアカウントが必要です。

もらってきたら適当な所に展開して、build.sh でコケた時に出るメッセージ(上記ドキュメントに書いてあるmavenのコマンド)でインストールするんですが、その前に、再度

maven3/apache-maven-3.x.x/conf/settings.xml
maven2/apache-maven-2.x.x/conf/settings.xml

を開いて編集。最初の方にある、


<!-- localRepository
 | The path to the local repository maven will use to store artifacts.
 |
 | Default: ~/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
これを活かして、

<localRepository>ソースコードを展開した場所/localrepo</localRepository>
と設定します。ここも重大なハメです。 書いたら、やっとmavenですが、いきなり mvn と叩いても確実にパスが通っていないので、これもソースコードを展開した場所で、

./maven3/apache-maven-3.x.x/bin/mvn install:install-file -DgroupId=javax.mail -DartifactId=mail \
-Dverson=1.3.3 -Dpackaging=jar -Dfile=javamailを展開した場所へのパス/mail.jar
とします。ソースコードを展開した場所/localrepo/の下にインストールされるのを確認。maven2 と maven3 のどちらを使うのがいいかわかりませんでしたが、とりあえず 3 でやってみました。

警告で止まる


ここまでできたら、またbuild.sh を実行し、何かが無いと言われたのをネットから探してきインストールするのを繰り返します。
そのうち、

警告:xxxxxxは内部所有のAPIであり、今後のリリースで削除される可能性があります
で止まります。警告なのに止まります。maven2の何かのバグっぽいのですが、「警告」っていう日本語がまずいらしく、LANG=Cで build.sh を実行すると回避できます。

$ LANG=C ./build.sh

あるいは build.sh の中で設定しちゃってください。ここまでWindowsでやっても、ここで同じようにハマりますが、回避方法がわからずギブしました。


はい、あとは、本当に、無いと言われたモノを探してきてインストールしてビルド、を繰り返せば完走できると思います。
結局、私がためした バージョン 5.3.1では、

  • javamail
  • javax.jms
  • javax.activation
  • DB2 (db2jcc4)
  • Oracle 11g (oracle-jdbc15)
を要求されました。

ドキュメントにプロジェクト毎に build.shをコピーして使えとあるように、 confluence本体のビルドだけでよければ、build.shをコピーして confluence-project の行だけにしてしまうのが早かったと後から気付きましたよ。

さて、これでやっと肝心のパッチ作成に進めます。 (プラグインでやれよという説が有力ですが)

(後記)
5.5以降のバージョンでは、色々書く必要ない程、簡単になりました。