之前在开发一个Maven插件(生成接口文档)的开发中,遇到Maven插件开发相关的问题,所以在这整理一下,希望能帮到遇到同样问题的你们。
我开发的插件说明文档:查看地址
1 创建maven plugin项目:
推荐一个图文教程:https://blog.csdn.net/u012620150/article/details/78652624
官网指导教程:http://maven.apache.org/guides/plugin/guide-java-plugin-development.html
2 开发相关
2.1 注入MavenProject,使用运行pom中的信息
2.1.1 依赖pom引入:
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
<version>2.0.6</version>
</dependency>
2.1.2 在你的XxxxMojo声明属性
/**
* @parameter default-value="${project}"
* @required
* @readonly
*/
private MavenProject project;
2.1.3 MavenProject就可以获取使用该插件的pom的所有信息了。
可以在idea或其他编辑器中,右键你的pom.xml > maven > Show Effective POM。在生成的文件中查找你想要的属性。MavenProject中的层级结构和pom.xml中的基本一致。
举几个例子吧:
- mavenProject.getGroupId() : 获取pom的<groupId>属性
- mavenProject.getArtifactId() : 获取pom的<artifactId>属性
- mavenProject.getVersion() : 获取pom的<version>属性
2.2 注入MavenSession,读取pom->dependences中dependence的pom信息
2.2.1 依赖pom引入:
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>3.0</version>
</dependency>
2.2.2 在你的XxxxMojo声明属性
注入MavenSession:
/**
* @parameter default-value="${session}"
* @required
* @readonly
*/
private MavenSession session;
注入ProjectBuilder:
/**
* @component
*/
private ProjectBuilder projectBuilder;
网上百度到的是使用@Component注解注入的,我没生效,试了下javadoc注解的方式,竟然成功了。
2.2.3 实现代码
获取pom文件中<dependences>下的<dependence>的对应的MavenProject对象。
ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest(session.getProjectBuildingRequest());
# 遍历依赖jar,获取对应的MavenProject对象
for (Artifact dependencyArtifact : (Set<Artifact>)project.getDependencyArtifacts()) {
buildingRequest.setProject(null);
MavenProject dependencyProject = projectBuilder.build(artifact, buildingRequest).getProject();
}
project就是2.1中执行该插件的pom对应的MavenProject
3. 之后还会在研究一些maven plugin开发相关的东西,之后再补充
参考链接
- 官网插件开发指导文档:http://maven.apache.org/plugin-developers/index.html
- 从Artifact获取MavenProject:https://codingdict.com/questions/125404
网友评论