Maven2のTIPS

趣味プロジェクト(postter)のほうはMaven2でビルドしているのでですが、はまった点などのTIPSをメモしておきます。
こちらのPOMを参考にしながら、以下の文を読むとわかりやすいと思います。(リビジョン25284時点)

これは恐らく、ソースコードエンコーディングJDKのバージョンが原因のことが多いです。
原因がそうであるなら、maven-compiler-pluginで自明にJavaのバージョンとエンコーディングを指定すると解消されます。
configurationタグの、sourceタグとtargetタグにJavaのバージョンを、encodingタグにエンコーディング指定を記述します。
エンコード指定などは他のMaven Pluginでも文字化けで問題になるため、適宜指定するほうがいいと思います。

  • repositoriesとpluginRepositoriesは別

これは依存jarはrepositoriesに記述されているところを探しますが、Maven PluginのほうはpluginRepositoriesに記述されているところを探します。
なぜかこのMaven Pluginの記述を追加したらビルドできない、ということがありましたらこの記述を確かめてみるのがいいですね。

  • reportingタグ

reportingタグはprojectの子要素です。
ここにFindBugsなどの静的解析ツールなどのMaven Pluginを記述しておけば、siteゴールを実行すると、自動的にプロジェクトリポートが作成され、そこに各Maven Pluginの実行した集計結果が作成されます。
無精者の私は、いちいち各Maven Pluginに対してgoalを設定しなくて楽だし、ビルドするたびに静的解析ツールが走査するのは結構重いので、このやり方が結構気に入っています。
気をつける点は、maven-site-pluginはplugins内に記述します。

sorce-jarを作ってくれます。

  • テストクラスの除外

maven-surefire-pluginを使います。
configurationタグのexcludesタグの、excludeタグに除外したいクラス名を追加すれば、テスト実行されません。

  • FatJar*1の作成

maven-shade-pluginを使うと楽です。
ただし、ビルドしなおすためには一度cleanしておく必要があります。
別の手段としてmaven-assembly-pluinがあり、こちらのほうが自由度が高いです。

  • Executable-Jarの作成

maven-jar-pluginを使います。
configurationタグのarchiveタグのmanifestタグの、mainClassタグにmainメソッドがあるクラスを記述し、addClasspathタグにtrueを記述します。

maven-javadoc-pluginを使います。
reportingタグないに記述することで、siteゴールでsiteとしてまとめて作成できます。

ソースコードリーディング用に以下のURLのような感じのものを作ってくれます。
http://cactusman.dip.jp/hudson/view/CodeRepos/job/posster-site/site/sorcerer/index.html
これもreportingタグ内に指定しておくと、siteゴールで作成されます。
Mave2で依存Jarを追加する方法は調査中です。
また、これを動かすにはJDK6が必要になります。


自分はこんな感じでやっています。
間違いがあれば、遠慮なくご指摘ください。

*1:一つのJarに複数個のJarをまとめたもの。