自定义maven插件
maven插件介绍
maven插件有很多的作用,maven插件简介
说个用的比较多的,就是jetty插件,通过配置jetty可以通过插件一键运行代码,测试部署代码更加简单了.还有很多,打包插件啊,部署插件啊等等…
自定义插件
我们可以通过自定义插件来完成自己想要的一些功能,举个例子,通过插件来查看项目有多少文件,文件行数.
首先建个项目;
引入依赖,这两个依赖maven包的,就不用解释了,引入就对了,需要其他功能也可以引入其他包:
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.5.2</version>
<exclusions>
<exclusion>
<artifactId>plexus-utils</artifactId>
<groupId>org.codehaus.plexus</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.5.2</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<artifactId>maven-artifact</artifactId>
<groupId>org.apache.maven</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.5.2</version>
<!-- 插件执行命令前缀 -->
<configuration>
<goalPrefix>goalPrefix</goalPrefix>
<skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
然后编写具体功能实现类,其实有两种方式实现,一种通过注解,还有一种通过文档方式,文档方式用的不多,就略过,感兴趣可以去网上查看:
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
@Mojo(name = "cesi", defaultPhase = LifecyclePhase.PACKAGE)
public class TestPlugin extends AbstractMojo {
@Parameter(property = "application")
private String application;
@Parameter(property = "sourceFolderPath")
private String sourceFolderPath;
@Parameter(property = "username")
private String username;
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
System.out.println("-----execute----");
System.out.println("应用名称:" + application);
System.out.println("工程应用路径:" + sourceFolderPath);
System.out.println("传入的username参数:" + username);
listAllFiles(new File(sourceFolderPath + "\\src"));
System.out.println("总文件个数为:" + count);
System.out.println("总行数为:" + lineCount);
}
static int count = 0;
static int lineCount = 0;
//获取文件列表(递归)
public static void listAllFiles(File file) {
if (file.isFile()) {
count++;
long lineNumber = getLineNumber(file);
lineCount += lineNumber;
System.out.println(file + "---行数:" + lineNumber);
} else {
if (file.exists() && file.isDirectory()) {
File[] files = file.listFiles();
for (File file1 : files) {
listAllFiles(file1);
}
}
}
}
//获取文件行数
public static long getLineNumber(File file) {
if (file.exists()) {
try {
FileReader fileReader = new FileReader(file);
LineNumberReader lineNumberReader = new LineNumberReader(fileReader);
lineNumberReader.skip(Long.MAX_VALUE);
long lines = lineNumberReader.getLineNumber() + 1;
fileReader.close();
lineNumberReader.close();
return lines;
} catch (IOException e) {
e.printStackTrace();
}
}
return 0;
}
}
项目进行编译打包
使用
在另外一个工程里面引入我们自定义的插件,在pom里面:
build下面的plugins下面加上:
<plugin>
<!--引入刚刚的插件依赖-->
<groupId>cn.migu.yida</groupId>
<artifactId>yida-maven-plugin2</artifactId>
<version>1.0.0-SNAPSHOT</version>
<!-- 这里加入的是相关参数,这些参数必须跟插件实现里面的属性保持一致 -->
<configuration>
<application>test</application><!-- 当前应用名称 -->
<sourceFolderPath>${basedir}</sourceFolderPath>
<username>aaaa</username>
</configuration>
</plugin>
然后等idea导入完成就可以看见:
运行
然后在cesi上面鼠标右键可以运行,当然也可以debug的,我这两个项目在同一个项目下,不同的模块下,就可以直接debug比较方便:
然后执行打印:
世界上所有的不公平都是由于当事人能力不足造成的.