pre{ white-space: pre; } .entry-content pre{ word-wrap: normal; }

ぶらコード

ぶらりオープンソースの旅

ぶらコード: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。

とりあえずググってみたところ、以下のサイトを見つけた。

Plexus – Plexus Overview

どうやら、maven用に開発されたIoC(Inversion of Contorl)するライブラリのようだね。

日本語の情報が出てこないから、かなりマイナーっぽいな。

 

次回は、こいつを調べるところから始めるとしよう。