Maven只是一套框架,它的功能基于全部依赖于插件来实现。因此可以通过插件开发来定制Maven。
官方文档
https://maven.apache.org/guides/plugin/guide-java-plugin-development.html
命名要求
Maven 官方的插件命名为:maven-<yourplugin>-plugin
第三方插件命名要求为:<yourplugin>-maven-plugin
实操步骤
第1步:创建一个Maven项目
第2步:导入依赖
<dependencies><dependency><groupId>org.apache.maven</groupId><artifactId>maven-plugin-api</artifactId><version>3.0</version></dependency><!-- 插件注解 --><dependency><groupId>org.apache.maven.plugin-tools</groupId><artifactId>maven-plugin-annotations</artifactId><version>3.4</version><scope>provided</scope></dependency></dependencies>
第3步:指定packaging类型 <packaging>maven-plugin</packaging>
<packaging>maven-plugin</packaging>
第4步:引入plugin
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-plugin-plugin</artifactId><version>3.6.0</version><configuration><goalPrefix>zzw</goalPrefix><skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound></configuration>
</plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.3.0</version><configuration><archive><manifest><addDefaultImplementationEntries>true</addDefaultImplementationEntries></manifest></archive></configuration>
</plugin>
1、添加maven-plugin-plugin
插件依赖,这个包可以使插件支持JDK1.8以上的版本;
[Ref] Maven插件开发教程
2、addDefaultImplementationEntries
会在生成的jar包的META-INF
目录下的MANIFEST.MF
文件里生成版本信息
[Ref] maven项目代码获取<version>版本号(通过jar包获取)
[Ref] Maven maven-jar-plugin 配置详情
第5步:编写业务代码
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Mojo;@Mojo(name = "sayhi")
public class GreetingMojo extends AbstractMojo {public void execute() throws MojoExecutionException {getLog().info("Hello, world.");}
}
第6步:build一下看看是否有编译问题
第7步:install 到本地仓库
第8步:根据maven签名,本地先验证一下
<groupId>org.example</groupId>
<artifactId>test-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
[Ref] mvn 插件groupId:插件artifactId[:插件版本]:插件目标名称
第9步:其他项目引入Maven插件的依赖
第10步:使用方式:直接执行
第11步:使用方式:把自定义插件绑定在项目的生命周期中
<plugin><groupId>org.example</groupId><artifactId>test-maven-plugin</artifactId><version>1.0-SNAPSHOT</version><executions><execution><id>test1</id><phase>compile</phase><goals><goal>sayhi</goal></goals></execution></executions>
</plugin>
phase
标签里面定义要绑定的生命周期,id
用于命令,可以自己定义。
我们可以看到,我们的自定义插件顺利随着compile生命周期执行了。
[Ref] 把自定义插件绑定在项目的生命周期中
参考
Maven - 通过开发插件了解 Maven
Idea开发maven插件
如何开发一个maven插件
Maven插件开发
maven 中的 goal 是什么
遇到的问题
Error resolving version for plugin ‘XXX‘ from the repositories,Plugin not found in any plugin reposi
Failed to parse plugin descriptor for org.apache.maven:maven-plugin-api:4.0.0-alpha-10