Maven pluginを書いてみる
Maven使ってビルドをしているときにふと自前のMavenプラグインが欲しくなることありますよね?
まぁ今時、必要そうなプラグインは一通りあるのであえて作りたくなるという時くらいしかないのかもしれないけれども。
というわけで本当のさわりだけやったので残しておきます。
プログラミングにおいてさわりと言えば「Hello World」ですよね。
下記のサイトを参考にしました。
Mavenプロジェクトを作成する | Maven3のはじめかた
pom.xml
サイトの通り、artifactIdは「○○-maven-plugin」とするのがよいそうです。
あと、packagingはそのままずばりの「maven-plugin」で。
サイトの通りなので書くまでもないっす。
Mojo
プラグインの処理を書くもので、goal毎に用意するみたい。
とりあえずパラメータとして「message」を用意し、そこに書かれたものを出力するだけです。
@Mojo(name = "hello", threadSafe = true, defaultPhase = LifecyclePhase.COMPILE) public class HelloMojo extends AbstractMojo { @Parameter(name = "message", required = true) private String message; @Override public void execute() throws MojoExecutionException, MojoFailureException { getLog().info("Hello " + message); } }
あとは
mvn install
すればOKです。
使ってみる
pluginプロジェクトとは別にプロジェクトを起こして、pom.xmlに下のように書きます。
<build> <plugins> <plugin> <groupId>local.chanko</groupId> <artifactId>chanko-maven-plugin</artifactId> <version>0.0.1-SNAPSHOT</version> <configuration> <message>chanko maven plugin</message> </configuration> <executions> <execution> <id>hello</id> <goals> <goal>hello</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
デフォルトフェーズをCOMPILEにしているので、
mvn compile
をたたけばhelloゴールが実行されるはずです。
結果
compileでちゃんとINFOのログに設定したメッセージが出ました。
[INFO] --- chanko-maven-plugin:0.0.1-SNAPSHOT:hello (hello) @ chanko-maven-plugin-test --- [INFO] Hello chanko maven plugin [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.860 s [INFO] Finished at: 2015-10-03T22:50:24+09:00 [INFO] Final Memory: 8M/155M [INFO] ------------------------------------------------------------------------
めでたし、めでたし。
補足
Eclipseを使っていると、pomに自作のpluginのパラメータ書くのでもちゃんとオートコンプリートが効いてくれます。