文章目录
- pom.xml
- java类
- 执行命令 mvn my-maven-plugin:hello2
- 引用项目的pom.xml配置
- 其他
- 自定义的插件如何和项目产生交互
- mojo是什么意思
- 如何看插件有几个功能
- maven插件如何调试
- 如何设置maven下载超时时间(连接时间)
感觉对maven插件不太明白,干脆自定义个,就容易理解其中的机制了。
pom.xml
<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/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>my-maven-plugin</artifactId><version>1.0-SNAPSHOT</version><packaging>maven-plugin</packaging><dependencies><dependency><groupId>org.apache.maven</groupId><artifactId>maven-plugin-api</artifactId><version>3.6.3</version><scope>provided</scope></dependency><dependency><groupId>org.apache.maven.plugin-tools</groupId><artifactId>maven-plugin-annotations</artifactId><version>3.5.2</version></dependency></dependencies>
</project>
注:主要就2个依赖。
maven-plugin-api # 插件核心api
maven-plugin-annotations # 如果要用到注解,添加这个依赖
java类
package com.example;import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;/*** @goal hello*/
@Mojo(name = "hello2") // 这里本来是hello,因为报错,就用hello2了
public class MyMojo extends AbstractMojo {/*** @parameter*/@Parameter(defaultValue = "World")private String name;public void execute() throws MojoExecutionException {getLog().info("Hello, " + name + "!");}
}
执行命令 mvn my-maven-plugin:hello2
报错 [ERROR] No plugin found for prefix ‘my-maven-plugin’ in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories [local (D:\maven repository), company (http://mvn.ttt.com:8081/nexus/content/groups/public)] -> [Help 1]
命令(感觉这个命令是有问题的):
mvn my-maven-plugin:hello2
那么用全路径试下:
mvn com.example:my-maven-plugin:hello2
发现成功了。
然后idea执行install命令,安装到本地仓库,其他项目就可以使用了。
引用项目的pom.xml配置
在pom.xml中引入该插件(如果找不到就本地引入):
<build><plugins><plugin><groupId>com.example</groupId><artifactId>my-maven-plugin</artifactId><version>1.0-SNAPSHOT</version><executions><execution><goals><goal>hello2</goal></goals></execution></executions></plugin></plugins></build>
idea maven界面点,发现个诡异的现象,应该是my:hello2,但居然是my:greeting(之前尝试的例子),这个包都删了,怎么会还有问题呢?
其他
自定义的插件如何和项目产生交互
这个问题乍看不好答,实际理一下就清楚了。
参数通过@Parameter进行交互。@Parameter对应xml中的标签。
再和生命周期的阶段绑定下就好了。
1、@Mojo的defaultPhase。
2、配置文件中配置,如:
<plugin><groupId>com.example</groupId><artifactId>my-plugin</artifactId><version>1.0.0</version><executions><!-- 在compile阶段执行插件的goal-1目标 --><execution><id>execution-1</id><phase>compile</phase><goals><goal>goal-1</goal></goals></execution><!-- 在install阶段执行插件的goal-2和goal-3目标 --><execution><id>execution-2</id><phase>install</phase><goals><goal>goal-2</goal><goal>goal-3</goal></goals></execution></executions>
</plugin>
mojo是什么意思
魔法、魔力 感觉这个命名还挺科学的。
如何看插件有几个功能
一般就很少的几个类。如果确实想看,到maven仓库对应的jar包解压下即可。
maven插件如何调试
1、命令来调试。如:mvn com.example:my-maven-plugin:hello2
2、main方法运行报错。
错误: 找不到或无法加载主类 com.example.MyMojo。 先略过。
还有个问题,执行命令时如何传递自定义参数?
mvn com.example:my-maven-plugin:hello2 -Dname=“java”