摘要:
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文件夾,該文件夾的內容如下:
│ pom.xml
│
├─src
│ ├─main
│ │ └─resources
│ │ ├─archetype-resources
│ │ │ │ .classpath
│ │ │ │ .project
│ │ │ │ pom.xml
│ │ │ │
│ │ │ ├─.settings
│ │ │ │ org.eclipse.core.resources.prefs
│ │ │ │ org.eclipse.jdt.core.prefs
│ │ │ │ org.eclipse.m2e.core.prefs
│ │ │ │
│ │ │ └─src
│ │ │ ├─main
│ │ │ │ └─java
│ │ │ │ Application.java
│ │ │ │ Quote.java
│ │ │ │ Value.java
│ │ │ │
│ │ │ └─test
│ │ │ └─java
│ │ │ AppTest.java
│ │ │
│ │ └─META-INF
│ │ └─maven
│ │ archetype-metadata.xml
│ │
│ └─test
│ └─resources
│ └─projects
│ └─basic
│ archetype.properties
│ goal.txt
│
└─target
│ gs-rest-service-yang-archetype-0.0.1-SNAPSHOT.jar
│
├─classes
│ ├─archetype-resources
│ │ │ .classpath
│ │ │ .project
│ │ │ pom.xml
│ │ │
│ │ ├─.settings
│ │ │ org.eclipse.core.resources.prefs
│ │ │ org.eclipse.jdt.core.prefs
│ │ │ org.eclipse.m2e.core.prefs
│ │ │
│ │ └─src
│ │ ├─main
│ │ │ └─java
│ │ │ Application.java
│ │ │ Quote.java
│ │ │ Value.java
│ │ │
│ │ └─test
│ │ └─java
│ │ AppTest.java
│ │
│ └─META-INF
│ └─maven
│ archetype-metadata.xml
│
├─gs-rest-service-yang-archetype-0.0.1-SNAPSHOT
│ ├─archetype-resources
│ │ │ .classpath
│ │ │ .project
│ │ │ pom.xml
│ │ │
│ │ ├─.settings
│ │ │ org.eclipse.core.resources.prefs
│ │ │ org.eclipse.jdt.core.prefs
│ │ │ org.eclipse.m2e.core.prefs
│ │ │
│ │ └─src
│ │ ├─main
│ │ │ └─java
│ │ │ Application.java
│ │ │ Quote.java
│ │ │ Value.java
│ │ │
│ │ └─test
│ │ └─java
│ │ AppTest.java
│ │
│ └─META-INF
│ └─maven
│ archetype-metadata.xml
│
└─test-classes
└─projects
└─basic
archetype.properties
goal.txt
可以看到上面有一些.setting, .class, .project的文件,這些是多余的。
所以我們在搭建好樣板工程之后,在使用mvn archetype:create-from-project命令之前,要先把項目中不相關的工程文件、中間文件刪除。
清除之后重新聲稱的結構如下:
│ pom.xml
│
├─src
│ ├─main
│ │ └─resources
│ │ ├─archetype-resources
│ │ │ │ pom.xml
│ │ │ │
│ │ │ └─src
│ │ │ ├─main
│ │ │ │ └─java
│ │ │ │ Application.java
│ │ │ │ Quote.java
│ │ │ │ Value.java
│ │ │ │
│ │ │ └─test
│ │ │ └─java
│ │ │ AppTest.java
│ │ │
│ │ └─META-INF
│ │ └─maven
│ │ archetype-metadata.xml
│ │
│ └─test
│ └─resources
│ └─projects
│ └─basic
│ archetype.properties
│ goal.txt
│
└─target
│ gs-rest-service-yang-archetype-0.0.1-SNAPSHOT.jar
│
├─classes
│ ├─archetype-resources
│ │ │ pom.xml
│ │ │
│ │ └─src
│ │ ├─main
│ │ │ └─java
│ │ │ Application.java
│ │ │ Quote.java
│ │ │ Value.java
│ │ │
│ │ └─test
│ │ └─java
│ │ AppTest.java
│ │
│ └─META-INF
│ └─maven
│ archetype-metadata.xml
│
└─test-classes
└─projects
└─basic
archetype.properties
goal.txt
四、生成Archetype如何安裝
在上文創建了archetype之后,進入到
target\generate-sources\
archetype目錄,然后在命令行執行:
mvn install
則輸出如下信息,特別是installing這段,表示就安裝成功了。
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building gs-rest-service-yang-archetype 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ gs-rest-service-yang-archetype ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 6 resources
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:testResources (default-testResources) @ gs-rest-service-yang-archetype ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-archetype-plugin:3.0.0:jar (default-jar) @ gs-rest-service-yang-archetype ---
[INFO] Building archetype jar: D:\WORK\personal\2.src\3.spring\gs-rest-service-yang-2\target\generated-sources\archetype
\target\gs-rest-service-yang-archetype-0.0.1-SNAPSHOT
[INFO]
[INFO] --- maven-archetype-plugin:3.0.0:integration-test (default-integration-test) @ gs-rest-service-yang-archetype ---
[INFO] Processing Archetype IT project: basic
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: gs-rest-service-yang-archetype:0.0.1-SNAPSHOT
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: archetype.it
[INFO] Parameter: artifactId, Value: basic
[INFO] Parameter: version, Value: 0.1-SNAPSHOT
[INFO] Parameter: package, Value: it.pkg
[INFO] Parameter: packageInPathFormat, Value: it/pkg
[INFO] Parameter: version, Value: 0.1-SNAPSHOT
[INFO] Parameter: package, Value: it.pkg
[INFO] Parameter: groupId, Value: archetype.it
[INFO] Parameter: artifactId, Value: basic
[INFO] Project created from Archetype in dir: D:\WORK\personal\2.src\3.spring\gs-rest-service-yang-2\target\generated-so
urces\archetype\target\test-classes\projects\basic\project\basic
[INFO]
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ gs-rest-service-yang-archetype ---
[INFO] Installing D:\WORK\personal\2.src\3.spring\gs-rest-service-yang-2\target\generated-sources\archetype\target\gs-re
st-service-yang-archetype-0.0.1-SNAPSHOT.jar to C:\Users\yangg\.m2\repository\com\huajiesolar\gs-rest-service-yang-arche
type\0.0.1-SNAPSHOT\gs-rest-service-yang-archetype-0.0.1-SNAPSHOT.jar
[INFO] Installing D:\WORK\personal\2.src\3.spring\gs-rest-service-yang-2\target\generated-sources\archetype\pom.xml to C
:\Users\yangg\.m2\repository\com\huajiesolar\gs-rest-service-yang-archetype\0.0.1-SNAPSHOT\gs-rest-service-yang-archetyp
e-0.0.1-SNAPSHOT.pom
[INFO]
[INFO] --- maven-archetype-plugin:3.0.0:update-local-catalog (default-update-local-catalog) @ gs-rest-service-yang-arche
type ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.073 s
[INFO] Finished at: 2017-02-21T22:35:47+08:00
[INFO] Final Memory: 14M/153M
[INFO] ------------------------------------------------------------------------
安裝之后主要做了兩件事情:
1) 將文件安裝到mvn緩存目錄,在我本機就是C:\Users\yangg\.m2\repository\com\huajiesolar\gs-rest-service-yang-archetype,該文件夾下的目錄結構如下:
| maven-metadata-local.xml
|
\---0.0.1-SNAPSHOT
gs-rest-service-yang-archetype-0.0.1-SNAPSHOT.jar
gs-rest-service-yang-archetype-0.0.1-SNAPSHOT.pom
maven-metadata-local.xml
_remote.repositories
2)創建了文件 C:\Users\yangg\.m2\repository\archetype-catalog.xml文件,文件內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<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"
xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<archetypes>
<archetype>
<groupId>com.huajiesolar</groupId>
<artifactId>gs-rest-service-yang-archetype</artifactId>
<version>0.0.1-SNAPSHOT</version>
<description>Parent pom providing dependency and plugin management for applications
built with Maven</description>
</archetype>
</archetypes>
</archetype-catalog>
五、使用上文創建的archetype
有2種使用方式:
1)通過命令行使用
找到一個空目錄,然后執行如下命令:
mvn archetype:generate -DarchetypeCatalog=local
此時會給出上文安裝的archetype,選擇即可,如下:
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:3.0.0:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:3.0.0:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
1: local -> com.huajiesolar:gs-rest-service-yang-archetype (Parent pom providing dependency and plugin management for applications
built with Maven)
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實戰》