多平台统一管理软件接口,如何实现多平台统一管理软件接口
190
2023-05-04
Maven2 plugin开发教程详解
首先,创建项目,创建一个文件夹:mkdir yakov
进入yakov目录,然后创建一个pom.xml:touch pom.xml,这个xml文件的结构会在另外的章节详细说一下。
使用vi编辑pom.xml,写入基本的项目信息,如下图:
单单是这些还是不够的,接下来需要,配置一些私服和集成。
注:上面的version改为3.0
有关的私服和集成服务在上一篇中写过:http://cnblogs.com/yakov/archive/2011/11/19/maven2_shi_jian.html
设置Maven从Nexus私服下载构件
可以设置某个项目从私服下载,设置项目的pom.xml如下:
...
...
但是这需要为每个项目配置一下,有可能你仅仅需要为你开发的所有项目都用这同一个私服,那么很好,settings.xml提供了profile来设置:
...
...
上面的配置是针对下载构件的,如果所有的下载都从私服上进行,就需要配置镜像了!如下所示:
...
...
以上几个任选一种就可以了,我这里使用了最后一种。
部署自己的构件至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
/**
* @parameter expression "${project.build.testResources}"
* @required
* @readonly
*/
private List
/**
* 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
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
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如下:
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~