- 公式サイトの以下のページにプラグインの getting started が載っている
- https://maven.apache.org/guides/plugin/guide-java-plugin-development.html
- 内容としては簡単だけれど、mavenに関する基本的な知識があったほうが理解しやすい
- さくっとプラグインを作るには以下のpomを使う
<project> <modelVersion>4.0.0</modelVersion> <groupId>sample.plugin</groupId> <artifactId>hello-maven-plugin</artifactId> <version>1.0-SNAPSHOT</version> <packaging>maven-plugin</packaging> <name>Sample Parameter-less Maven Plugin</name> <dependencies> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-plugin-api</artifactId> <version>3.0</version> <scope>provided</scope> </dependency> <!-- dependencies to annotations --> <dependency> <groupId>org.apache.maven.plugin-tools</groupId> <artifactId>maven-plugin-annotations</artifactId> <version>3.4</version> <scope>provided</scope> </dependency> </dependencies> </project>
- mojo を作る
- maven old java object の略(のはず)
- 一つのゴールに紐付いていて、プラグインの中に複数定義できる
@Parameter
アノテーションを指定すれば、パラメーターを受け取れる- Stringだけじゃなくてbooleanやintなどの型でも受け取れる
package org.example.demo.maven.plugin; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; /** * Says "hi" to the user. */ @SuppressWarnings("SpellCheckingInspection") @Mojo(name = "sayhi") public class GreetingMojo extends AbstractMojo { @Parameter(property = "greeting", defaultValue = "Hello, world") private String greeting; @Parameter(property = "myBoolean") private boolean myBoolean; public void execute() { getLog().info(greeting); getLog().info(Boolean.toString(myBoolean)); } }
mvn install
でローカルリポジトリに入れれば、ローカルの他のプロジェクトで使用できる- 他のプロジェクトで使うには以下のようなpomにする
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>demo-maven-plugin-user</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> <build> <plugins> <plugin> <groupId>org.example</groupId> <artifactId>demo-maven-plugin</artifactId> <version>1.0-SNAPSHOT</version> <configuration> <greeting>Hello, from pom</greeting> </configuration> <executions> <execution> <phase>compile</phase> <goals> <goal>sayhi</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
- 実行するとこんな感じ
$ mvn demo:sayhi [INFO] Scanning for projects... [INFO] [INFO] -----------------< org.example:demo-maven-plugin-user >----------------- [INFO] Building demo-maven-plugin-user 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- demo-maven-plugin:1.0-SNAPSHOT:sayhi (default-cli) @ demo-maven-plugin-user --- [INFO] Hello, from pom [INFO] false [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.198 s [INFO] Finished at: 2021-08-07T21:16:57+09:00 [INFO] ------------------------------------------------------------------------
- compileフェーズにゴールを紐づけているので、compileするとmojoも実行される
$ mvn compile [INFO] Scanning for projects... [INFO] [INFO] -----------------< org.example:demo-maven-plugin-user >----------------- [INFO] Building demo-maven-plugin-user 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ demo-maven-plugin-user --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ demo-maven-plugin-user --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- demo-maven-plugin:1.0-SNAPSHOT:sayhi (default) @ demo-maven-plugin-user --- [INFO] Hello, from pom [INFO] false [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.650 s [INFO] Finished at: 2021-08-07T21:19:58+09:00 [INFO] ------------------------------------------------------------------------