ぶらコード:maven:その1
mavenさんのソースコードを、いつだったかローカルに落としてきてる。
きちんとしたコンテンツにまとめる際には、どっから落としてきたのか、とかちゃんと書いておく必要があるよね。
とりあえず落としてしてきてビルドを通そうと思ったけど、結構苦労した。
さらにmvn eclipse:eclipseやってeclipseに取り込んだりしたけど、
さて、どっから読もうか。。。
単純に考えるとmain()メソッドがどこかにあって、そこがエントリポイントなはずなんだけど、モジュールもたくさんあるし、どっからどこが呼ばれるのか、とかはただ眺めてても分からんもんだ。
で、正攻法としていつも使っている使い方を試みて、そいつを実行した時に何が動くのかを見れば良いと考えるわけだ。
とりあえずこの記事を書いているのは、MacなのでMac上で以下のコマンドを打つ。
which mvn
/usr/local/bin/mvn
で、上記のmvnさんについて調べると、どうやらシェルスクリプトのようですね。
$ file /usr/local/bin/mvn
/usr/local/bin/mvn: Bourne-Again shell script text executable
では、早速中身を拝見してみましょう。
$ less /usr/local/bin/mvn
#!/bin/bash
JAVA_HOME="${JAVA_HOME:-$(/usr/libexec/java_home)}" exec "/usr/local/Cellar/maven/3.3.3/libexec/bin/mvn" "$@"
うーーん。なんかたらい回しにされてる??
環境変数のJAVA_HOMEを設定した後に、別のコマンドを実行しているみたいっすね。
では、こやつが何者なのかを調べてみると、結局さらに別のシェルスクリプトを実行していると。
$ file /usr/local/Cellar/maven/3.3.3/libexec/bin/mvn
/usr/local/Cellar/maven/3.3.3/libexec/bin/mvn: POSIX shell script text executable
で、「/usr/local/Cellar/maven/3.3.3/libexec/bin/mvn」の中身を見るとちょっと長いスクリプトになっているから、単純に貼り付けるも見通し悪そう。
ごにょごにょと色々やってるようだけど、JAVA_HOMEとかM2_HOMEとかチェックしたり、設定したりしてますね。cygwinようの分岐とかもあったりする。
で、紆余曲折を経て、結局やりたいのは、以下に転記した最後の数行なんだろう。
exec "$JAVACMD" \
$MAVEN_OPTS \
-classpath "${M2_HOME}"/boot/plexus-classworlds-*.jar \
"-Dclassworlds.conf=${M2_HOME}/bin/m2.conf" \
"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${CLASSWORLDS_LAUNCHER} "$@"
変数を参照してるから分かりにくくなってるけど、「plexus-classworlds-*.jar」とかいうjarファイルを指定して、javaコマンドを実行しているということだな。あとは実行時のオプションだろう。
で、つまりは、このjarが何者なのかということと、渡しているオプションを把握せんと先に進めないということだ。やれやれ。(やれやれと思いながらも、実は楽しい)
で、このjarが何者なのかを調べないといけない。
キーワードは、plexus。
とりあえずググってみたところ、以下のサイトを見つけた。
どうやら、maven用に開発されたIoC(Inversion of Contorl)するライブラリのようだね。
日本語の情報が出てこないから、かなりマイナーっぽいな。
次回は、こいつを調べるところから始めるとしよう。