讀古今文學網 > Maven實戰 > 3.5 使用Archetype生成項目骨架 >

3.5 使用Archetype生成項目骨架

Hello World項目中有一些Maven的約定:在項目的根目錄中放置pom.xml,在src/main/java目錄中放置項目的主代碼,在src/test/java中放置項目的測試代碼。之所以一步一步地展示這些步驟,是為了能讓可能是Maven初學者的你得到最實際的感受。我們稱這些基本的目錄結構和pom.xml文件內容稱為項目的骨架,當第一次創建項目骨架的時候,你還會饒有興趣地去體會這些默認約定背後的思想,第二次,第三次,你也許還會滿意自己的熟練程度,但第四、第五次做同樣的事情,你可能就會惱火了。為此Maven提供了Archetype以幫助我們快速勾勒出項目骨架。

還是以Hello World為例,我們使用maven archetype來創建該項目的骨架,離開當前的Maven項目目錄。

如果是Maven 3,簡單地運行:

如果是Maven 2,最好運行如下命令:

很多資料會讓你直接使用更為簡單的mvn archetype:generate命令,但在Maven 2中這是不安全的,因為該命令沒有指定Archetype插件的版本,於是Maven會自動去下載最新的版本,進而可能得到不穩定的SNAPSHOT版本,導致運行失敗。然而在Maven 3中,即使用戶沒有指定版本,Maven也只會解析最新的穩定版本,因此這是安全的。具體內容見7.7節。

我們實際上是在運行插件maven-archetype-plugin,注意冒號的分隔,其格式為groupId:artifactId:version:goal,org.apache.maven.plugins是maven官方插件的groupId,maven-archetype-plugin是Archetype插件的artifactId,2.0-alpha-5是目前該插件最新的穩定版,generate是要使用的插件目標。

緊接著會看到一段長長的輸出,有很多可用的Archetype供選擇,包括著名的Appfuse項目的Archetype、JPA項目的Archetype等。每一個Archetype前面都會對應有一個編號,同時命令行會提示一個默認的編號,其對應的Archetype為maven-archetype-quickstart,直接回車以選擇該Archetype,緊接著Maven會提示輸入要創建項目的groupId、artifactId、version以及包名package。如下輸入並確認:

Archetype插件將根據我們提供的信息創建項目骨架。在當前目錄下,Archetype插件會創建一個名為hello-world(我們定義的artifactId)的子目錄,從中可以看到項目的基本結構:基本的pom.xml已經被創建,裡面包含了必要的信息以及一個junit依賴;主代碼目錄src/main/java已經被創建,在該目錄下還有一個Java類com.juvenxu.mvnbook.helloworld.App,注意這裡使用到了剛才定義的包名,而這個類也僅僅只有一個簡單的輸出Hello World!的main方法;測試代碼目錄src/test/java也被創建好了,並且包含了一個測試用例com.juvenxu.mvnbook.helloworld.AppTest。

Archetype可以幫助我們迅速地構建起項目的骨架,在前面的例子中,我們完全可以在Archetype生成的骨架的基礎上開發Hello World項目以節省大量時間。

此外,這裡僅僅是看到了一個最簡單的Archetype,如果有很多項目擁有類似的自定義項目結構以及配置文件,則完全可以一勞永逸地開發自己的Archetype,然後在這些項目中使用自定義的Archetype來快速生成項目骨架。本書後面的章節會詳細闡述如何開發Maven Archetype。