摘要:
    Archetype是什么?它由哪些文件组成?如何创建和安装自己的archtype,如何使用自己创建的archetype?



一、Archetype是什么
    Archetype其实就是一个Maven的Project模板,以方便用户快速创建maven的Project。有官方提供的Archetype,用户也可以创建自己的Archetype,比如我们公司的所有工程都使用相同的groupId,都将包含相同的库文件,那么我们就可以创建一个自己的archetype,然后大家下载过去安装在自己的本地。或者放在一个内部服务器上,然后大家在自己的eclipse上配置好该服务器catogries.xml文件的路径;

    下图是官方提供的Archetype的生命周期,现在只要了解,后续将详细介绍。



二、Archetype工程的组成
一个典型的archetype包含如下组成部分:
1)Archetype descriptor(archetype.xml),这个文件位于路径src/main/resources/META-INF/maven/,那就除了所有将要包含在archetype中的文件,并且给他们做了分类以便Archetype的生成机制可以正确的处理它们;
2)Archetype插件将要拷贝的原型文件,位于路径,src/main/resources/archetype-resources/;
3)pom.xml原型文件,位于路径:src/main/resources/archetype-resources
4)这个工程本身自己的pom.xml;


三、如何生成Archetype
    首先基于一个用户已有的工程,使用mvn archetype:create-from-project 就可以在该project的target\generate-sources\archetype生成了一个archetype。
    比如我刚刚在gs-rest-service-yang工程内运行了mvn archetype:create-from-project命令,然后在target子目录下声称了generated-sources文件夹,文件夹内包含了archetype文件夹,该文件夹的内容如下:
  1. │ pom.xml
  2. ├─src
  3. │ ├─main
  4. │ │ └─resources
  5. │ │ ├─archetype-resources
  6. │ │ │ │ .classpath
  7. │ │ │ │ .project
  8. │ │ │ │ pom.xml
  9. │ │ │ │
  10. │ │ │ ├─.settings
  11. │ │ │ │ org.eclipse.core.resources.prefs
  12. │ │ │ │ org.eclipse.jdt.core.prefs
  13. │ │ │ │ org.eclipse.m2e.core.prefs
  14. │ │ │ │
  15. │ │ │ └─src
  16. │ │ │ ├─main
  17. │ │ │ │ └─java
  18. │ │ │ │ Application.java
  19. │ │ │ │ Quote.java
  20. │ │ │ │ Value.java
  21. │ │ │ │
  22. │ │ │ └─test
  23. │ │ │ └─java
  24. │ │ │ AppTest.java
  25. │ │ │
  26. │ │ └─META-INF
  27. │ │ └─maven
  28. │ │ archetype-metadata.xml
  29. │ │
  30. │ └─test
  31. │ └─resources
  32. │ └─projects
  33. │ └─basic
  34. │ archetype.properties
  35. │ goal.txt
  36. └─target
  37. │ gs-rest-service-yang-archetype-0.0.1-SNAPSHOT.jar
  38. ├─classes
  39. │ ├─archetype-resources
  40. │ │ │ .classpath
  41. │ │ │ .project
  42. │ │ │ pom.xml
  43. │ │ │
  44. │ │ ├─.settings
  45. │ │ │ org.eclipse.core.resources.prefs
  46. │ │ │ org.eclipse.jdt.core.prefs
  47. │ │ │ org.eclipse.m2e.core.prefs
  48. │ │ │
  49. │ │ └─src
  50. │ │ ├─main
  51. │ │ │ └─java
  52. │ │ │ Application.java
  53. │ │ │ Quote.java
  54. │ │ │ Value.java
  55. │ │ │
  56. │ │ └─test
  57. │ │ └─java
  58. │ │ AppTest.java
  59. │ │
  60. │ └─META-INF
  61. │ └─maven
  62. │ archetype-metadata.xml
  63. ├─gs-rest-service-yang-archetype-0.0.1-SNAPSHOT
  64. │ ├─archetype-resources
  65. │ │ │ .classpath
  66. │ │ │ .project
  67. │ │ │ pom.xml
  68. │ │ │
  69. │ │ ├─.settings
  70. │ │ │ org.eclipse.core.resources.prefs
  71. │ │ │ org.eclipse.jdt.core.prefs
  72. │ │ │ org.eclipse.m2e.core.prefs
  73. │ │ │
  74. │ │ └─src
  75. │ │ ├─main
  76. │ │ │ └─java
  77. │ │ │ Application.java
  78. │ │ │ Quote.java
  79. │ │ │ Value.java
  80. │ │ │
  81. │ │ └─test
  82. │ │ └─java
  83. │ │ AppTest.java
  84. │ │
  85. │ └─META-INF
  86. │ └─maven
  87. │ archetype-metadata.xml
  88. └─test-classes
  89. └─projects
  90. └─basic
  91. archetype.properties
  92. goal.txt
可以看到上面有一些.setting, .class, .project的文件,这些是多余的。
所以我们在搭建好样板工程之后,在使用mvn archetype:create-from-project命令之前,要先把项目中不相关的工程文件、中间文件删除。
清除之后重新声称的结构如下:

  1. │ pom.xml
  2. ├─src
  3. │ ├─main
  4. │ │ └─resources
  5. │ │ ├─archetype-resources
  6. │ │ │ │ pom.xml
  7. │ │ │ │
  8. │ │ │ └─src
  9. │ │ │ ├─main
  10. │ │ │ │ └─java
  11. │ │ │ │ Application.java
  12. │ │ │ │ Quote.java
  13. │ │ │ │ Value.java
  14. │ │ │ │
  15. │ │ │ └─test
  16. │ │ │ └─java
  17. │ │ │ AppTest.java
  18. │ │ │
  19. │ │ └─META-INF
  20. │ │ └─maven
  21. │ │ archetype-metadata.xml
  22. │ │
  23. │ └─test
  24. │ └─resources
  25. │ └─projects
  26. │ └─basic
  27. │ archetype.properties
  28. │ goal.txt
  29. └─target
  30. │ gs-rest-service-yang-archetype-0.0.1-SNAPSHOT.jar
  31. ├─classes
  32. │ ├─archetype-resources
  33. │ │ │ pom.xml
  34. │ │ │
  35. │ │ └─src
  36. │ │ ├─main
  37. │ │ │ └─java
  38. │ │ │ Application.java
  39. │ │ │ Quote.java
  40. │ │ │ Value.java
  41. │ │ │
  42. │ │ └─test
  43. │ │ └─java
  44. │ │ AppTest.java
  45. │ │
  46. │ └─META-INF
  47. │ └─maven
  48. │ archetype-metadata.xml
  49. └─test-classes
  50. └─projects
  51. └─basic
  52. archetype.properties
  53. goal.txt

四、生成Archetype如何安装
    在上文创建了archetype之后,进入到target\generate-sources\archetype目录,然后在命令行执行:
    mvn install
    则输出如下信息,特别是installing这段,表示就安装成功了。
  1. [INFO] Scanning for projects...
  2. [INFO]
  3. [INFO] ------------------------------------------------------------------------
  4. [INFO] Building gs-rest-service-yang-archetype 0.0.1-SNAPSHOT
  5. [INFO] ------------------------------------------------------------------------
  6. [INFO]
  7. [INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ gs-rest-service-yang-archetype ---
  8. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
  9. [INFO] Copying 6 resources
  10. [INFO]
  11. [INFO] --- maven-resources-plugin:3.0.2:testResources (default-testResources) @ gs-rest-service-yang-archetype ---
  12. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
  13. [INFO] Copying 2 resources
  14. [INFO]
  15. [INFO] --- maven-archetype-plugin:3.0.0:jar (default-jar) @ gs-rest-service-yang-archetype ---
  16. [INFO] Building archetype jar: D:\WORK\personal\2.src\3.spring\gs-rest-service-yang-2\target\generated-sources\archetype
  17. \target\gs-rest-service-yang-archetype-0.0.1-SNAPSHOT
  18. [INFO]
  19. [INFO] --- maven-archetype-plugin:3.0.0:integration-test (default-integration-test) @ gs-rest-service-yang-archetype ---
  20. [INFO] Processing Archetype IT project: basic
  21. [INFO] ----------------------------------------------------------------------------
  22. [INFO] Using following parameters for creating project from Archetype: gs-rest-service-yang-archetype:0.0.1-SNAPSHOT
  23. [INFO] ----------------------------------------------------------------------------
  24. [INFO] Parameter: groupId, Value: archetype.it
  25. [INFO] Parameter: artifactId, Value: basic
  26. [INFO] Parameter: version, Value: 0.1-SNAPSHOT
  27. [INFO] Parameter: package, Value: it.pkg
  28. [INFO] Parameter: packageInPathFormat, Value: it/pkg
  29. [INFO] Parameter: version, Value: 0.1-SNAPSHOT
  30. [INFO] Parameter: package, Value: it.pkg
  31. [INFO] Parameter: groupId, Value: archetype.it
  32. [INFO] Parameter: artifactId, Value: basic
  33. [INFO] Project created from Archetype in dir: D:\WORK\personal\2.src\3.spring\gs-rest-service-yang-2\target\generated-so
  34. urces\archetype\target\test-classes\projects\basic\project\basic
  35. [INFO]
  36. [INFO] --- maven-install-plugin:2.5.2:install (default-install) @ gs-rest-service-yang-archetype ---
  37. [INFO] Installing D:\WORK\personal\2.src\3.spring\gs-rest-service-yang-2\target\generated-sources\archetype\target\gs-re
  38. st-service-yang-archetype-0.0.1-SNAPSHOT.jar to C:\Users\yangg\.m2\repository\com\huajiesolar\gs-rest-service-yang-arche
  39. type\0.0.1-SNAPSHOT\gs-rest-service-yang-archetype-0.0.1-SNAPSHOT.jar
  40. [INFO] Installing D:\WORK\personal\2.src\3.spring\gs-rest-service-yang-2\target\generated-sources\archetype\pom.xml to C
  41. :\Users\yangg\.m2\repository\com\huajiesolar\gs-rest-service-yang-archetype\0.0.1-SNAPSHOT\gs-rest-service-yang-archetyp
  42. e-0.0.1-SNAPSHOT.pom
  43. [INFO]
  44. [INFO] --- maven-archetype-plugin:3.0.0:update-local-catalog (default-update-local-catalog) @ gs-rest-service-yang-arche
  45. type ---
  46. [INFO] ------------------------------------------------------------------------
  47. [INFO] BUILD SUCCESS
  48. [INFO] ------------------------------------------------------------------------
  49. [INFO] Total time: 2.073 s
  50. [INFO] Finished at: 2017-02-21T22:35:47+08:00
  51. [INFO] Final Memory: 14M/153M
  52. [INFO] ------------------------------------------------------------------------

安装之后主要做了两件事情:
1) 将文件安装到mvn缓存目录,在我本机就是C:\Users\yangg\.m2\repository\com\huajiesolar\gs-rest-service-yang-archetype,该文件夹下的目录结构如下:
  1. | maven-metadata-local.xml
  2. |
  3. \---0.0.1-SNAPSHOT
  4. gs-rest-service-yang-archetype-0.0.1-SNAPSHOT.jar
  5. gs-rest-service-yang-archetype-0.0.1-SNAPSHOT.pom
  6. maven-metadata-local.xml
  7. _remote.repositories
2)创建了文件 C:\Users\yangg\.m2\repository\archetype-catalog.xml文件,文件内容如下:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <archetype-catalog xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0 http://maven.apache.org/xsd/archetype-catalog-1.0.0.xsd"
  3. xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  5. <archetypes>
  6. <archetype>
  7. <groupId>com.huajiesolar</groupId>
  8. <artifactId>gs-rest-service-yang-archetype</artifactId>
  9. <version>0.0.1-SNAPSHOT</version>
  10. <description>Parent pom providing dependency and plugin management for applications
  11. built with Maven</description>
  12. </archetype>
  13. </archetypes>
  14. </archetype-catalog>

五、使用上文创建的archetype
有2种使用方式:
1)通过命令行使用
    找到一个空目录,然后执行如下命令:
    mvn archetype:generate -DarchetypeCatalog=local
    此时会给出上文安装的archetype,选择即可,如下:
  1. [INFO] Scanning for projects...
  2. [INFO]
  3. [INFO] ------------------------------------------------------------------------
  4. [INFO] Building Maven Stub Project (No POM) 1
  5. [INFO] ------------------------------------------------------------------------
  6. [INFO]
  7. [INFO] >>> maven-archetype-plugin:3.0.0:generate (default-cli) > generate-sources @ standalone-pom >>>
  8. [INFO]
  9. [INFO] <<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources @ standalone-pom <<<
  10. [INFO]
  11. [INFO] --- maven-archetype-plugin:3.0.0:generate (default-cli) @ standalone-pom ---
  12. [INFO] Generating project in Interactive mode
  13. [INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
  14. Choose archetype:
  15. 1: local -> com.huajiesolar:gs-rest-service-yang-archetype (Parent pom providing dependency and plugin management for applications
  16. built with Maven)
  17. Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): :
2)通过eclipse使用
    因为C:\Users\yangg\.m2\repository\archetype-catalog.xml是新创建的,所以需要在ecliplse的 file -》new-》maven projects对话框中,在选择archetype页面上,如下图
 点击上文的config按钮,弹出如下界面:
 点击add local catalog ...按钮,在弹出的对话框中选择上文新声称的catalog文件:
 点击Ok即可。

然后在界面上就可以选择新创建的archetype模板了。
 

  《Maven实战》











学习笔记:Maven的ArcheType的学习笔记的更多相关文章

  1. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  2. 20145213《Java程序设计学习笔记》第六周学习总结

    20145213<Java程序设计学习笔记>第六周学习总结 说在前面的话 上篇博客中娄老师指出我因为数据结构基础薄弱,才导致对第九章内容浅尝遏止地认知.在这里我还要自我批评一下,其实我事后 ...

  3. 强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning)

    强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning) 学习笔记: Reinforcement Learning: An Introductio ...

  4. 学习笔记TF045:人工智能、深度学习、TensorFlow、比赛、公司

    人工智能,用计算机实现人类智能.机器通过大量训练数据训练,程序不断自我学习.修正训练模型.模型本质,一堆参数,描述业务特点.机器学习和深度学习(结合深度神经网络). 传统计算机器下棋,贪婪算法,Alp ...

  5. Hadoop学习笔记(10) ——搭建源码学习环境

    Hadoop学习笔记(10) ——搭建源码学习环境 上一章中,我们对整个hadoop的目录及源码目录有了一个初步的了解,接下来计划深入学习一下这头神象作品了.但是看代码用什么,难不成gedit?,单步 ...

  6. 20145230《java学习笔记》第七周学习总结

    20145230 <Java程序设计>第7周学习总结 教材学习内容 Lambda语法概览 我们在许多地方都会有按字符串长度排序的需求,如果在同一个方法内,我们可以使用一个byName局部变 ...

  7. 【笔记】MySQL的基础学习(二)

    [笔记]MySQL的基础学习(二) MySQL 老男孩  一 视图 视图其实就是给表起个别名 1.创建视图 格式:CREATE VIEW 视图名称 AS SQL语句 CREATE VIEW v1 AS ...

  8. 【笔记】MySQL的基础学习

    [笔记]MySQL的基础学习 老男孩 MySQL  一 安装与配置 1 下载安装 官网:http://dev.mysql.com/downloads/mysql/ 下载相应版本的压缩包 解压压缩包至任 ...

  9. 【学习笔记】jQuery的基础学习

    [学习笔记]jQuery的基础学习 新建 模板 小书匠  什么是jQuery对象? jQuery 对象就是通过jQuery包装DOM对象后产生的对象.jQuery 对象是 jQuery 独有的. 如果 ...

随机推荐

  1. DIM-00014: Cannot open the Windows NT Service Control Manager.

    创建Oracle数据库时出错: OPW-00001: Unable to open password-file DIM-00014: Cannot open the Windows NT Servic ...

  2. loj2048 「HNOI2016」最小公倍数

    link 题意: 给定一张$N$个顶点$M$条边的无向图(顶点编号为$1,2,...,n$),每条边上带有权值.所有权值都可以分解成$2^a \cdot 3^b$的形式. 现在有$q$个询问,每次询问 ...

  3. Reveal逆向工程:分析任意iOS应用的UI界面

    在iOS逆向工程中,Reveal扮演着重要角色,一般情况下,Reveal在iOS开发过程中可以分析UI界面的状态,同样也可以应用于分析其他任意的App.特别是对于初学者来说,去了解其他优秀App的界面 ...

  4. spring boot 集成 druid

    写在前面 因为在用到spring boot + mybatis的项目时候,经常发生访问接口卡,服务器项目用了几天就很卡的甚至不能访问的情况,而我们的项目和数据库都是好了,考虑到可能是数据库连接的问题, ...

  5. 如何用万用表判断一个12V蓄电池是否没电

    常用的方法如下: 1.找一根细铜丝,接触电瓶的正负极柱,冒火花说明电瓶有电,不冒火花说明没有电. 2.用万用表测量电瓶的电压,12.7V说明满电,11.50V一下说明没有电. 3.找一个12V的灯泡或 ...

  6. 解决 PermGen space Tomcat内存设置(转)

    在使用Java程序从数据库中查询大量的数据或是应用服务器(如tomcat.jboss,weblogic)加载jar包时会出现java.lang.OutOfMemoryError异常.这主要是由于应用服 ...

  7. FileReader读取中文txt文件编码丢失问题(乱码)(转)

    有一个UTF-8编码的文本文件,用FileReader读取到一个字符串,然后转换字符集:str=new String(str.getBytes(),"UTF-8");结果大部分中文 ...

  8. LPC43xx SGPIO Experimentation

    LPC4350 SGPIO Experimentation The NXP LPC43xx microcontrollers have an interesting, programmable ser ...

  9. USB with NXP Microcontrollers

    USB with NXP Microcontrollers NXP Advantages NXP's microcontroller portfolio features the latest USB ...

  10. C++ STL set::find的用法

      参考: http://blog.csdn.net/lihao21/article/details/6302196 /* class for function predicate * - opera ...