十四、archetype

本章是《maven实战》最后一章啦,十四章走来,每天都在坚持,同时也简单的记录了自己每一天的点点滴滴,感谢大家支持,我会继续走下去,希望能在今后给大家带来更加精彩的故事
接下来我准备向《高性能MySQL》进军啦,可能过程中笔记更新会不定期,但是我还是会按照章节的方式记录每一章重点并呈现给大家,所以前方路途虽远,但坚持就是胜利,一起加油吧!!!

十四、archetype_第1张图片
forgive.jpg

可以把archetype当做一个模板,当我们要创建一些项目的时候,可以通过简单的maven命令就可以快速生成项目的骨架

使用archetype的一般步骤

交互式

mvn archetype:generate,mvn会列出一个列表供用户选择

十四、archetype_第2张图片
archetype项目列表.png

这个列表来自archetype-catalog.xml文件,在后续操作中,用户需要提供一些通用的基本参数,主要有groupId,artifactId,version,package,这样archetype插件就可以生成项目的骨架了

批处理方式

批处理方式不同在于使用上述命令时直接把参数给出来,同时使用-B参数要求archetype插件以批处理的方式运行,不过需要用户显示给出archetype的坐标信息

mvn archetype:generate -B \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DarchetypeVersion=1.0 \
-DgroupId=com.zheng.mavenstudy\
-DartifactId=archetype-test \
-Dversion=1.0-SNAPSHOT \
-Dpackage=com.zheng.mavenstudy

常用的archetype介绍

maven-archetype-quickstart默认值 常用于一般javase项目结构
maven-archetype-webapp 用于web项目架构
appfuse archetype
appfuse是一个集成了很多开源工具的项目,在于帮助程序员快速高效的创建项目,它提供了大量archetype,方便用户使用各种类型的项目

编写自己的archetype项目

一个archetype-maven项目需要包含以下几个重要部分
pom.xml archetype自身的pom
src/main/resources/archetype-resources/pom.xml 基于该archetype生成的项目pom原型
src/main/resources/META-INF/maven/archetype-metadata.xml archetype的描述符文件
src/main/resources/archetype-resources/ 其他需要包含在archetype项目中的内容
基本结构如下

十四、archetype_第3张图片
自定义archetype项目结构.png

archetypepom.xml文件,用于定义archetype项目的坐标
archetype-test/pom.xml


  4.0.0
  com.zheng.archetypestudy
  archetype-test
  1.0-SNAPSHOT

生成的项目pom.xml
用于描述生成项目中包含的一些配置,包括参数、依赖等,其中groupId,artifactId,version使用了属性替换
文件位于archetype-test/src/main/resources/archetype-resources/pom.xml


    4.0.0
    ${groupId}
    ${artifactId}
    ${version}
    jar
    ${artifactId}
    
        
            junit
            junit
            4.12
        
    
    
        
            
                
                    org.apache.maven.plugins
                    maven-compiler-plugin
                    3.6.1
                    
                        1.8
                        1.8
                    
                
                
                    org.apache.maven.plugins
                    maven-resources-plugin
                    2.6
                    
                        UTF-8
                    
                
            
        
    

archetype-metadata.xml文件,用于描述archetype项目哪些文件夹及目录需要被引入到项目中
位于
archetype-test/src/main/resources/META-INF/maven/archetype-metadata.xml
其中通过fileSets设置了需要被用于项目中的文件,通过filtered,packaged分别设置指定目录下包含的文件是否需要属性值替换,同时对应的目录是否需要生成包目录



    
    
        
            src/main/java
            
                **/*.java
            
        
        
            src/test/java
            
                **/*.java
            
        
        
            src/main/resources
            
                **/*.properties
            
        
    
    
        
            com.zheng.archetypestudy
        
    

上面配置的src/main/java,src/test/java,src/main/resources,分别指向目标项目的src/main/java,src/test/java,src/main/resources
对应于archetype-test项目的
archetype-test/src/main/resources/archetype-resources/src/main/java
archetype-test/src/main/resources/archetype-resources/src/test/java
archetype-test/src/main/resources/archetype-resources/src/main/resources
其中配置的src/main/java目录,采用通配符方式包含所有当前包及其子包下的java文件,最终出现在目标项目project-name/src/main/java/[package-name]/**/*.java

自定义的一些项目文件
archetype-test/src/main/resources/archetyperesources/src/main/java/dao/BaseDao.java

package ${package}.dao;

import java.io.Serializable;
import java.util.List;

/**
 * 基础数据接口
 * Created by zhenglian on 2017/8/21.
 */
public interface BaseDao {
    void save(T t);
    void update(T t);
    int delete(Serializable id);
    T findById(Serializable id);
    List findAll();
}

注意上面package引入通过${package}变量名方式,这样可以通过在命令行时动态指定,结合上面所提供的archetype-metadata.xml配置,对指定文件进行变量替换
archetype-test/src/main/resources/archetype-resources/src/main/java/service/BaseService.java

package ${package}.service;

import java.io.Serializable;
import java.util.List;

/**
 * 基础服务接口
 * Created by zhenglian on 2017/8/21.
 */
public interface BaseService {
    void save(T t);
    void update(T t);
    int delete(Serializable id);
    T findById(Serializable id);
    List findAll();
}

配置完成后,项目总体结构如上面给出的图所示,通过mvn clean installarchetype项目打包到本地仓库中
如此就可以通过mvn archetype:generate命令使用本地创建的archetype项目架构了
mvn archetype:generate -DarchetypeGroupId=com.zheng.archetypestudy -DarchetypeArtifactId=archetype-test -DarchetypeVersion=1.0-SNAPSHOT

注意在运行该命令的时候,如果是在archetype-test项目根目录下,那么会报错,提示Unable to add module to the current project as it is not of packaging type 'pom',说明当前创建的项目为模块项目,而父级目录不是一个pom类型的项目,所以报错
在上一级目录下运行即可

十四、archetype_第4张图片
自定义archetype运行结果.png

archetypeCatalog

在使用maven-archetype-plugin插件时,会得到一个列表供选择,这个列表的信息来源于一个名为archetype-catalog.xml的文件
用户可以自定义这个archetype-catalog.xml中的内容,当然也可以通过扫描本地仓库自动生成基于该仓库的archetype-catalog.xml文件
那么archetype-catalog.xml配置文件是从哪里来的呢,maven中有以下几种选择:
internal maven内置的archetypeCatalog
local 指向用户本地的archetype catalog,其位置为C:\Users\Administrator\.m2\archetype-catalog.xml,但是该文件默认是不存在的
remote 指向了maven中央仓库的archetype catalog,具体地址为http://repo1.maven.org/maven2/archetype-catalog.xml
file://... 用户可以指定本机任何位置的archetype-catalog.xml文件
http://... 用户可以使用http协议指定远程的archetype-catalog.xml文件
上面几种方式可以通过mvn archetype:generate命令的时候,使用archetypeCatalog指定插件使用的catalog,例如:
mvn archetype:generate -DarchetypeCatalog=local

十四、archetype_第5张图片
使用本机archetypecatalog.png

上面的local指定使用C:\Users\Administrator\.m2\archetype-catalog.xml配置文件



  
    
      org.apache.maven.archetypes
      maven-archetype-mojo
      1.0
      plugin
    
    
      org.apache.maven.archetypes
      maven-archetype-quickstart
      1.0
      quickstart
    
    
      org.apache.maven.archetypes
      maven-archetype-quickstart
      1.1
      quickstart
    
    
      org.apache.maven.archetypes
      maven-archetype-webapp
      1.0
      webapp
    
    
      org.appfuse.archetypes
      appfuse-modular-spring
      2.0
      appfuse-modular-spring
    
  

上面的archetype-catalog.xml是通过扫描本地仓库自动生成的,可以通过mvn archetype:crawl来浏览当前本地仓库的项目结构,默认会生成到本地仓库(localRepository)配置的根目录下
当然也可以通过-Drepository指定本地仓库位置,-Dcatalog指定生成的archetype-catalog.xml生成的方式
mvn archetype:crawl -Drepository=G:/workspace/repository -Dcatalog=C:/Users/Administrator/.m2/archetype-catalog.xml
如果没有指定-Drepository参数时,maven会通过settings.xml中配置的本地仓库进行解析

通过学习上面,我相信大家应该可以通过自定义自己的archetype来生成属于自己的项目骨架啦,赶紧动起来吧!

你可能感兴趣的:(十四、archetype)