CLOVER🍀

That was when it all began.

mvnコマンドで、ソースとJavadocのJARを取得する

最近、またMavenリポジトリを作ることになりまして。以前の反省を踏まえてdependency:go-offlineゴールを活用して作ろうと思ったのですが、そういえば、ソースとかJavadocとかも落とせた方がいいなぁと思って調べてみました。

Eclipseとかではなく、mvnコマンドを使用する前提で。EclipseとかIntelliJだと、設定でチェック入れればいいだけですからね。

結果から出すと、ソースのJARをダウンロードするには以下のゴールを使用すればよいようです。
dependency:sources
http://maven.apache.org/plugins/maven-dependency-plugin/sources-mojo.html

$ mvn dependency:sources

続いて、JavadocのJARをダウンロードする場合は、こちらのゴールを。
dependency:resolve
http://maven.apache.org/plugins/maven-dependency-plugin/resolve-mojo.html

$ mvn dependency:resolve -Dclassifier=javadoc

なんですけど、classifierオプションを使ってjavadocを指定するところがポイントです。

よって、以前紹介した「dependency:go-offline」ゴールと「maven.repo.local」システムプロパティを使用すると、クラスファイルとソースとJavadocのJARを含めたローカルリポジトリを構築できます。

ですので、例えば新しく作るローカルリポジトリを「localrepos」としたとすると、最初にソースを集めて

$ mvn dependency:sources -Dmaven.repo.local=localrepos

次にJavadocを集めて

$ mvn dependency:resolve -Dclassifier=javadoc -Dmaven.repo.local=localrepos

最後に「dependency:go-offline」でクラスファイルを集めます。

$ mvn dependency:go-offline -Dmaven.repo.local=localrepos

まあ、順番はどうでもいい気がしますが。

ただ、これだけだと実際にコンパイルする時などで支障が出ると思うので

$ mvn clean -Dmaven.repo.local=localrepos

とか

$ mvn package -Dmaven.repo.local=localrepos

とかを実行して、各ゴールで必要なプラグインなども集めておいた方がよさそうです。まあ、この時のMavenプラグインのソースとかJavadocとかは先の手順だと入らないですけど、プラグインはいいかなぁと…。

ちなみに、

[INFO] The following files were skipped:
[INFO]    org.seasar.container:s2-framework:java-source:sources:2.4.46

などと表示されてどうしても取得できない場合は、1度

$ mvn clean

を実行してtargetディレクトリを空にしてやり直すとよいみたいです。

あと、

[INFO] The following files have NOT been resolved:
[INFO]    aopalliance:aopalliance:java-source:javadoc:1.0

こんな感じで表示された場合は、対象のMavenリポジトリにソースやJavadocがないってことになるので、この場合は今回の手順ではどうにもなりませんね…。