摘要:
    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. PMP 考试 形式

    200 道单选题- 考试时间为4个小时(上午9点到下午1点) 1年4次考试时间 2017年 3月18 6月24 9月9 10月9 考试费用3300 PMBOK

  2. Linux系统的组成

    <linux系统7大子系统> a:SCI(system call interface) ————用户程序通过软件中断后,调用系统内核提供的功能,这个在用户空间和内核提供的服务之间的接口称为 ...

  3. 1722 最优乘车 1997年NOI全国竞赛

    题目描述 Description H城是一个旅游胜地,每年都有成千上万的人前来观光.为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴上线路.每条单程巴士线路从某个巴士 ...

  4. BZOJ2217 : [Poi2011]Lollipop

    若能得到一个和为t的区间,那么至少去掉两端点中任意一个后必定能得到和为t-2的区间. 所以只需要分别找到和最大的和为奇数和偶数的区间,然后$O(n)$完成构造即可. #include<cstdi ...

  5. Xtreme9.0 - Mr. Pippo's Pizza 数学

    Mr. Pippo's Pizza 题目连接: https://www.hackerrank.com/contests/ieeextreme-challenges/challenges/mr-pipp ...

  6. 设置Azure WebSite黑白名单

    Azure WebSite服务默认是不提供黑白名单,也就是说任何Internet用户都可以访问Azure WebSite,那么我们如何来给我们的网站设置黑白名单? 这里有一种方式,可以通过配置网站的配 ...

  7. 使用 IntraWeb (18) - 基本控件之 TIWImage、TIWImageFile、TIWImageList

    TIWImage //用于显示资源中的图片, 设计时通过 Picture 载入图片到资源 TIWImageFile //用于显示给定路径或地址的图片 TIWImageList //它继承于 TImag ...

  8. nginx php-fpm安装配置(转)

    nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端. nginx一般是把请求发fastcgi管理进程处理,fascgi管 ...

  9. Python可视化库

    转自小小蒲公英原文用Python可视化库 现如今大数据已人尽皆知,但在这个信息大爆炸的时代里,空有海量数据是无实际使用价值,更不要说帮助管理者进行业务决策.那么数据有什么价值呢?用什么样的手段才能把数 ...

  10. SpringBoot 中使用 @Value 为 static 变量赋值

    原文:https://www.jianshu.com/p/ea477fc9abf7 例如: public class Utils { @Value("${test.host}") ...