hatenob

プログラムって分からないことだらけ

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のパラメータ書くのでもちゃんとオートコンプリートが効いてくれます。