Maven2 plugin开发教程详解

 更新时间:2017年06月28日 11:46:59   作者:Yakov  
这篇文章主要为大家详细介绍了Maven2 plugin的开发教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

首先,创建项目,创建一个文件夹: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如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Spring Boot 集成 Mybatis Plus 自动填充字段的实例详解

    Spring Boot 集成 Mybatis Plus 自动填充字段的实例详解

    这篇文章主要介绍了Spring Boot 集成 Mybatis Plus 自动填充字段,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • java编程小白进阶包的作用详解

    java编程小白进阶包的作用详解

    这篇文章主要为大家介绍了java编程中包的作用详解,文中通过示例分析方便大家更容易理解包的作用,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-10-10
  • springboot整合redis过期key监听实现订单过期的项目实践

    springboot整合redis过期key监听实现订单过期的项目实践

    现在各种电商平台都有自己的订单过期时间设置,那么如何设置订单时间过期呢,本文主要介绍了springboot整合redis过期key监听实现订单过期的项目实践,感兴趣的可以了解一下
    2023-12-12
  • 详解SpringBoot多跨域请求的支持(JSONP)

    详解SpringBoot多跨域请求的支持(JSONP)

    跨域是很多项目需要遇到的文章,本篇文章主要介绍了详解SpringBoot多跨域请求的支持(JSONP),具有一定的参考价值,有兴趣的可以了解一下
    2017-04-04
  • 基于Java方式实现数据同步

    基于Java方式实现数据同步

    这篇文章主要为大家详细介绍了基于Java方式实现数据同步,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • Springboot Caffeine本地缓存使用示例

    Springboot Caffeine本地缓存使用示例

    这篇文章主要介绍了Springboot Caffeine本地缓存使用示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Java继承方法重写实现原理及解析

    Java继承方法重写实现原理及解析

    这篇文章主要介绍了Java继承方法重写实现原理及解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Java读取json数据并存入数据库的操作代码

    Java读取json数据并存入数据库的操作代码

    很多朋友问大佬们JAVA怎么把json存入数据库啊,这一问题就把我难倒了,纠结如何操作呢,下面小编把我的经验分享给大家,感兴趣的朋友一起看看吧
    2021-08-08
  • Java对世界不同时区timezone之间时间转换的处理方法

    Java对世界不同时区timezone之间时间转换的处理方法

    这篇文章主要介绍了Java对世界不同时区timezone之间时间转换的处理方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 使用@PathVariable注解如何实现动态传值

    使用@PathVariable注解如何实现动态传值

    这篇文章主要介绍了使用@PathVariable注解如何实现动态传值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10

最新评论