mavenさんのソースコードを、いつだったかローカルに落としてきてる。

きちんとしたコンテンツにまとめる際には、どっから落としてきたのか、とかちゃんと書いておく必要があるよね。

とりあえず落としてしてきてビルドを通そうと思ったけど、結構苦労した。

さらにmvn eclipse:eclipseやってeclipseに取り込んだりしたけど、

さて、どっから読もうか。。。

単純に考えるとmain()メソッドがどこかにあって、そこがエントリポイントなはずなんだけど、モジュールもたくさんあるし、どっからどこが呼ばれるのか、とかはただ眺めてても分からんもんだ。

で、正攻法としていつも使っている使い方を試みて、そいつを実行した時に何が動くのかを見れば良いと考えるわけだ。

とりあえずこの記事を書いているのは、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

ごにょごにょと色々やってるようだけど、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)するライブラリのようだね。

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

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

results matching ""

    No results matching ""