Maven2はプラグインを使って機能拡張ができるように設計されています。
開発の基本となるコンパイルやパッケージングもプラグインによって処理が行われています。
初回の起動時にものすごく時間がかかるのは、必要なプラグインをセントラルレポジトリからいっせいにダウンロードしているからです。
今回はプラグインの基本について見てみます。
開発の基本となるコンパイルやパッケージングもプラグインによって処理が行われています。
初回の起動時にものすごく時間がかかるのは、必要なプラグインをセントラルレポジトリからいっせいにダウンロードしているからです。
今回はプラグインの基本について見てみます。
様々なプラグイン
Maven2でデフォルトで利用されているプラグインを見てみます。パッケージングで使ったsample-jarのpom.xmlファイルを準備します。
$ mvn help:effective-pom
とすると現在のpom.xmlファイルを元に隠れている設定も含めたpom.xmlファイルが出力されます。
project/build/pluginManagementの設定に数多くのプラグインが表示されていると思います。
フェーズとゴール
Maven2の基本でフェーズについて簡単に説明しました。プラグインにはゴールというものが設定されていて、パッケージングの種類に応じて各フェーズに割り当てられています。
例えば
<packaging>jar</packaging>
のcompile
フェーズでは、maven-compiler-pluginプラグインのcompile
ゴールの処理を行う、という感じです。ゴールの実行
デフォルトでフェーズに割り当てられているプラグインもそれぞれ単独で各ゴールを実行することができます。例えばmaven-compiler-pluginプラグインの
compile
ゴールを実行します。$ mvn org.apache.maven.plugins:maven-compiler-plugin:2.0.2:compile
本来であれば上記のように ${groupId}:${artifactId}:${version}:${goal} と指定してゴールを実行することになりますが、以下のルールにより短く記述することができます。
- groupIdは、"org.apache.maven.plugins"であるもの、もしくはsettings.xmlかpom.xmlにて設定してあるものは省略することができる。
- artifactIdは、maven-${name}-plugin、もしくは${name}-maven-pluginであるものは${name}と省略できる。
- versionは省略すると、すでにローカルにあるものの内最新のもの、もしくはレポジトリから取得できる最新のものを利用する。
というわけで、
$ mvn compiler:compile
で実行できます。
compile
フェーズの実行と違い前段のprocess-resources
フェーズなどは実行されません。プラグインの設定・追加
pom.xmlファイルに設定をすることでプラグインの設定・追加することができます。maven-compiler-pluginプラグインにコンパイラオプションの設定を追加してみます。
また、jetty-maven-pluginプラグインを追加します。
pom.xml
<project>
・・・・
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
</plugin>
・・・・
</plugins>
</build>
・・・・
</project>
<groupId>
タグは、"org.apache.maven.plugins"であるもの、もしくはsettings.xmlで設定してあるものは省略することができます。<version>
タグでversionを明示的に指定することができます。セントラルレポジトリ以外のレポジトリからダウンロードする場合には、
<pluginRepository>
タグでレポジトリの位置を指定します。<project> ・・・・ <pluginRepositories> <pluginRepository> <id>maven.repository</id> <name>Sample Maven2 Repository</name> <url>http://maven.repository/maven2</url> </pluginRepository> <pluginRepository> <id>maven.repository</id> <name>Sample Maven2 SNAPSHOT Repository</name> <url>http://maven.repository/maven2-snapshot</url> </pluginRepository> ・・・・ </pluginRepositories> ・・・・ </project>