全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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如下:

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


# Maven  # Maven2  # plugin  # java 中使用maven shade plugin 打可执行Jar包  # Maven的几个常用plugin  # 创建一个  # 自己的  # 几个  # 很好  # 好了  # 有可能  # 为你  # 会在  # 要在  # 镜像  # 所示  # 都用  # 在上  # 还需  # 完后  # 写过  # 大家多多  # 单是  # 如下图  # 就可以 


相关文章: 公司门户网站制作流程,华为官网怎么做?  如何快速搭建二级域名独立网站?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  公司网站制作价格怎么算,公司办个官网需要多少钱?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  如何快速配置高效服务器建站软件?  焦点电影公司作品,电影焦点结局是什么?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  建站之星展会模板:智能建站与自助搭建高效解决方案  如何选择建站程序?包含哪些必备功能与类型?  建站之星IIS配置教程:代码生成技巧与站点搭建指南  制作旅游网站html,怎样注册旅游网站?  如何选择可靠的免备案建站服务器?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?  如何用虚拟主机快速搭建网站?详细步骤解析  学校建站服务器如何选型才能满足性能需求?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  seo网站制作优化,网站SEO优化步骤有哪些?  如何在香港服务器上快速搭建免备案网站?  学校为何禁止电信移动建设网站?  个人摄影网站制作流程,摄影爱好者都去什么网站?  如何在腾讯云免费申请建站?  高防服务器租用指南:配置选择与快速部署攻略  建站之星如何一键生成手机站?  如何用PHP工具快速搭建高效网站?  建站之星×万网:智能建站系统+自助建站平台一键生成  高端云建站费用究竟需要多少预算?  怀化网站制作公司,怀化新生儿上户网上办理流程?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  如何制作一个表白网站视频,关于勇敢表白的小标题?  如何在香港免费服务器上快速搭建网站?  如何在景安云服务器上绑定域名并配置虚拟主机?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  如何用已有域名快速搭建网站?  江苏网站制作公司有哪些,江苏书法考级官方网站?  深圳网站制作的公司有哪些,dido官方网站?  装修招标网站设计制作流程,装修招标流程?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  山东网站制作公司有哪些,山东大源集团官网?  制作国外网站的软件,国外有哪些比较优质的网站推荐?  建站org新手必看:2024最新搭建流程与模板选择技巧  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  孙琪峥织梦建站教程如何优化数据库安全?  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  哈尔滨网站建设策划,哈尔滨电工证查询网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。