Maven2 plugin开发教程详解
发布时间 - 2026-01-11 02:05:59 点击率:次首先,创建项目,创建一个文件夹:mkdir yakov

进入yakov目录,然后创建一个pom.xml:touch pom.xml,这个xml文件的结构会在另外的章节详细说一下。
使用vi编辑pom.xml,写入基本的项目信息,如下图:
单单是这些还是不够的,接下来需要,配置一些*和集成。
注:上面的version改为3.0
有关的*和集成服务在上一篇中写过:http://www.cnblogs.com/yakov/archive/2011/11/19/maven2_shi_jian.html
设置Maven从Nexus*下载构件
可以设置某个项目从*下载,设置项目的pom.xml如下:
<project>
...
<repositories>
<repository>
<id>nexus</id>
<name>Nexus</name>
<url>http://202.117.15.193:8010/nexus/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>Nexus</name>
<url>http://202.117.15.193:8010/nexus/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
...
</project>
但是这需要为每个项目配置一下,有可能你仅仅需要为你开发的所有项目都用这同一个*,那么很好,settings.xml提供了profile来设置:
<settings>
...
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus</id>
<name>Nexus</name>
<url>http://202.117.15.193:8010/nexus/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>Nexus</name>
<url>http://202.117.15.193:8010/nexus/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
...
</settings>
上面的配置是针对下载构件的,如果所有的下载都从*上进行,就需要配置镜像了!如下所示:
<settings>
...
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://202.117.15.193:8010/nexus/content/groups/public/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
...
</settings>
以上几个任选一种就可以了,我这里使用了最后一种。
部署自己的构件至Nexus
直接在要部署的项目的pom.xml中写入如下代码:
还需要在settings.xml中设置用户名和密码,因为Nexus的仓库对于匿名用户是readonly的:
至此,有关*已经设置好了!
在目录src/main/java下编写plugin
在yakov下创建src/main/java目录
写一个YakovMojo的类:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.maven.model.Resource;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
/**
*
* @author org.omylab.yakov
* @goal yakov
*/
public class YakovMojo extends AbstractMojo{
private final String[] INCLUDES_DEFAULT={"java","xml","properties"};
/**
* @parameter expression="${project.basedir}"
* @required
* @readonly
*/
private File basedir;
/**
* @parameter expression ="${project.build.sourceDirectory}"
* @required
* @readonly
*/
private File sourceDirectory;
/**
* @parameter expression ="${project.biuld.testSourceDirectory}"
* @required
* @readonly
*/
private File testSourceDirectory;
/**
* @parameter expression ="${project.build.resources}"
* @required
* @readonly
*/
private List<Resource> resources;
/**
* @parameter expression "${project.build.testResources}"
* @required
* @readonly
*/
private List<Resource> testResources;
/**
* The file types which will be included for counting
*
* @parameter
*/
private String[] includes;
public void execute() throws MojoExecutionException, MojoFailureException{
if(includes==null||includes.length==0){
includes=INCLUDES_DEFAULT;
}
try{
countDir(sourceDirectory);
countDir(testSourceDirectory);
for(Resource resource:resources){
countDir(new File(resource.getDirectory()));
}
for(Resource resource:testResources){
countDir(new File(resource.getDirectory()));
}
}catch(IOException e){
throw new MojoExecutionException("Unable to count lines of code.",e);
}
}
private void countDir(File dir)throws IOException{
if(!dir.exists())return;
List<File> collected=new ArrayList<File>();
collectFiles(collected,dir);
int lines=0;
for(File sourceFile:collected){
lines+=countLine(sourceFile);
}
String path=dir.getAbsolutePath().substring(basedir.getAbsolutePath().length());
getLog().info(path+" : "+lines+" lines of code in "+collected.size()+" files");
}
private void collectFiles(List<File> collected,File file){
if(file.isFile()){
for(String include:includes){
if(file.getName().endsWith("."+include)){
collected.add(file);
break;
}
}
}else{
for(File sub:file.listFiles()){
collectFiles(collected,sub);
}
}
}
private int countLine(File file)throws IOException{
BufferedReader reader=new BufferedReader(new FileReader(file));
int line =0;
try{
while(reader.ready()){
reader.readLine();
line++;
}
}finally{
reader.close();
}
return line;
}
}
然后运行mvn clean compile,运行结果如下:
编译完成,这里可移执行安装了,事实上,还应该有对应的测试代码,以后再讲。
运行mvn clean install完后就安装成功了。
最后运行mvn clean deploy 完成发布,查看Nexus如下:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Maven
# Maven2
# plugin
# java 中使用maven shade plugin 打可执行Jar包
# Maven的几个常用plugin
# 创建一个
# 自己的
# 几个
# 很好
# 好了
# 有可能
# 为你
# 会在
# 要在
# 镜像
# 所示
# 都用
# 在上
# 还需
# 完后
# 写过
# 大家多多
# 单是
# 如下图
# 就可以
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
高性价比服务器租赁——企业级配置与24小时运维服务
如何快速登录WAP自助建站平台?
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
php在windows下怎么调试_phpwindows环境调试操作说明【操作】
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
教你用AI将一段旋律扩展成一首完整的曲子
如何在阿里云服务器自主搭建网站?
如何用AWS免费套餐快速搭建高效网站?
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
太平洋网站制作公司,网络用语太平洋是什么意思?
Angular 表单中正确绑定输入值以确保提交与验证正常工作
在Oracle关闭情况下如何修改spfile的参数
php json中文编码为null的解决办法
深圳网站制作平台,深圳市做网站好的公司有哪些?
Laravel如何实现用户注册和登录?(Auth脚手架指南)
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
如何快速生成专业多端适配建站电话?
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
网站制作软件免费下载安装,有哪些免费下载的软件网站?
Laravel用户密码怎么加密_Laravel Hash门面使用教程
用yum安装MySQLdb模块的步骤方法
Laravel如何实现一对一模型关联?(Eloquent示例)
java中使用zxing批量生成二维码立牌
七夕网站制作视频,七夕大促活动怎么报名?
重庆市网站制作公司,重庆招聘网站哪个好?
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
,网页ppt怎么弄成自己的ppt?
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
Laravel如何使用Gate和Policy进行授权?(权限控制)
黑客如何利用漏洞与弱口令入侵网站服务器?
高防服务器:AI智能防御DDoS攻击与数据安全保障
PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】
实例解析angularjs的filter过滤器
Python函数文档自动校验_规范解析【教程】
高端云建站费用究竟需要多少预算?
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
如何在IIS中新建站点并配置端口与物理路径?
浅谈redis在项目中的应用
Laravel如何实现用户密码重置功能?(完整流程代码)
bootstrap日历插件datetimepicker使用方法
在线制作视频网站免费,都有哪些好的动漫网站?
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
Laravel如何配置任务调度?(Cron Job示例)
如何用JavaScript实现文本编辑器_光标和选区怎么处理
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】

