了解
maven是一款服務于java平臺的自動化構建工具(專案管理工具)
構建:全方位、多角度、深層次地建立
專案構建是一個專案從:源代碼、編譯、測驗、打包、部署、運行的程序
用來解決團隊開發遇到的問題
如: 統一 jar包 統一組態檔,單元測驗 的代碼位置即 目錄結構的統一
傳統的專案構建程序
1)在eclipse中創建一個java web工程
2)在工程中撰寫源代碼及組態檔等
3)對源代碼進行編譯,java檔案編譯成class檔案
4)執行Junit單元測驗
5)將工程打成war包部署至tomcat運行
maven專案 構建程序
maven將項目構建的程序進行標準化,每個階段使用一個命令完成

優點:
- 一個命令完成構建、運行,方便快捷,
- maven對每個構建階段進行規范,非常有利于大型團隊協作開發,
1.3 什么是依賴管理
什么是依賴?一個java專案可能要使用一些第三方的jar包才可以運行,那么我們說這個java專案依賴了這些第三方的jar包,
什么是依賴管理?就是對專案所有依賴的jar包進行規范化管理,


總結使用maven的好處
- 一步構建 命令執行,標準化
- 依賴管理 安全又方便
- 跨平臺 電腦 手機都可用
- 團隊開發 有規程 效率高,成本低 大家都喜歡用它
核心檔案pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xrq.withmaven</groupId>
<artifactId>withmaven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build/>
</project>
1、modelVersion
指定了當前Maven模型的版本號,對于Maven2和Maven3來說,它只能是4.0.0
2、groupId
顧名思義,這個應該是公司名或是組織名,一般來說groupId是由三個部分組成,每個部分之間以".“分隔,第一部分是專案用途,比如用于商業的就是"com”,用于非營利性組織的就 是"org";第二部分是公司名, 如"tengxun"、“baidu”、“alibaba”;第三部分是你的專案名
3、artifactId
可以認為是Maven構建的專案名,比如你的專案中有子專案,就可以使用"專案名-子專案名"的命名方式
4、version
版本號,SNAPSHOT意為快照,說明該專案還在開發中,是不穩定的版本,在Maven中很重要的一點是,groupId、artifactId、version三個元素生成了一個Maven專案的基本坐標,這非常重要,我在使用和研究Maven的時候多次感受到了這點,
在上面的這些元素之外,還有一些元素,同樣羅列一下:
1、packing
專案打包的型別,可以使jar、war、rar、ear、pom,默認是jar
2、dependencies和dependency
前者包含后者,前面說了,Maven的一個重要作用就是統一管理jar包,為了一個專案可以build或運行,專案中不可避免的,會依賴很多其他的jar包,在Maven中,這些依賴就被稱為dependency,
本地倉庫和遠程倉庫的概念 如下
* 本地倉庫
* 遠程倉庫
* 中央倉庫
* 私服 //自己的架構包 放在上面
* 其他公共庫 //別人的
本地倉庫 執行maven命令時才創建
maven 本地儲存的位置,有很多架構包
官方下載的本地倉庫的配置在"%MAVEN_HOME%\conf\settings.xml"里面,找一下"localRepository"就可以了;

setting.xml:
改兩個地方
- 確定 本地倉庫位置
<localRepository>E:\maven\repository</localRepository>
- 為了提高下載速度而 配置的阿里云鏡像
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>

MyEclipse默認的本地倉庫的地址在**"{user.home}/.m2/repository"路徑下**,同樣找一下"localRepository"就可以找到MyEclipse默認的本地倉庫了,

安裝 配置環境
首先去Maven官網,下載Maven的包,地址為http://maven.apache.org/download.cgi,找到下面的部分,點擊就可以下載
將maven解壓到一個不含有中文和空格的目錄中,
-
bin目錄 mvn.bat (以run方式運行專案)、 mvnDebug.bat(以debug方式運行專案 )
-
boot目錄 maven運行需要類加載器
-
conf目錄 settings.xml 整個maven工具核心組態檔
-
lib目錄 maven運行依賴jar包

-
電腦上需安裝java環境,安裝JDK1.7 + 版本 (將JAVA_HOME/bin 配置環境變數path )
配置 MAVEN_HOME -
%MAVEN_HOME%/bin 加入環境變數 path

-
mvn -v命令檢查 maven是否安裝成功


maven倉庫的作用
本地倉庫和遠程倉庫是這樣的,Maven工程首先會從本地倉庫中獲取jar包,當無法獲取指定jar包時,本地倉庫會從遠程倉庫(中央倉庫)中下載jar包,并放入本地倉庫以備將來使用,

優先從本地倉庫查找
默認本地倉庫位置在 {user.dir}表示windows用戶目錄,
遠程倉庫
如果本地需要插件或者jar包,本地倉庫沒有,默認去遠程倉庫下載,
遠程倉庫可以在互聯網內也可以在局域網內,

中央倉庫
在maven軟體中內置一個遠程倉庫地址http://repo1.maven.org/maven2 ,它是中央倉庫,服務于整個互聯網,它是由Maven團隊自己維護,里面存盤了非常全的jar包,它包含了世界上大部分流行的開源專案構件,
定義maven坐標
每個maven工程都需要定義本工程的坐標,坐標是maven對jar包的身份定義,比如:入門程式的坐標定義如下:
<!--專案名稱,定義為組織名+專案名,類似包名-->
<groupId>cn.atcast.maven</groupId>
<!-- 模塊名稱 -->
<artifactId>maven-first</artifactId>
<!-- 當前專案版本號,snapshot為快照版本即非正式版本,release為正式發布版本 -->
<version>0.0.1-SNAPSHOT</version>
<packaging > :打包型別
jar:執行package會打成jar包
war:執行package會打成war包
pom :用于maven工程的繼承,通常父工程設定為pom
第一個maven
需求
創建一個web工程,實作入門程式的功能,
1)添加index.jsp,輸出hello world
2)添加一個servlet轉發到jsp頁面,
① 創建約定的目錄結構(maven工程必須按照約定的目錄結構創建)
根目錄:工程名
|—src:原始碼
|—|---main:存放主程式
|—|---|—java:java原始碼檔案
|—|---|—resource:存放框架的組態檔
|—|---test:存放測驗程式
|—pop.xml:maven的核心組態檔
我們按照上面的檔案夾目錄結構手動創建一下,不用任何IDE環境(手動的其實最有助于我們理解maven)



出錯:


專案的結構 也不對 檢查配置 和setting.xml 是否出錯
pom.xml報錯
缺少 web.xml----aa\src\main\webapp\WEB-INF
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>HelloServlet</display-name>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>cn.atcast.web.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
</web-app>
NewFile.xml報錯 (新建一個xml 顯示123123)

解決:
1.

2.

3. pom.xml 包配置+ 添加servelt/jsp的包
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
</dependencies>
目錄

問題解決 后 讓他跑起來吧
–>Run As
案例二:
①、配置
選擇選單windows–>preferences(引數)–>maven

選擇Installations(安裝),添加你自己下載并解壓好的maven目錄,并打上對勾 √,點擊Apply(應用)
再選擇User Settings目錄,在User Settings中選擇Browse(瀏覽),選擇你自己maven里的conf下的settings.xml檔案,

插一句:settings.xml這個組態檔,主要是配置你本地倉庫的路徑的,不想使用默認路徑,就打開檔案,加上自己的路徑配置,
**<localRepository>C:Program FilesJavarepository</localRepository>
到此,maven整個的設定就OK了,**
專案就創建完成后,但是jdk的版本還有sevlet-api等jar包還沒有

選擇創建好的工程單擊右鍵,選擇properties 并找到 Java Build Path,把jdk的版本選擇你電腦上的正確的jdk版本,

選擇創建好的工程單擊右鍵,選擇properties 并找到 Project Facets,版本選擇3.1,下面的java版本選擇1.8,點擊Apply

選擇創建好的工程單擊右鍵,找到build path

找到Libaries,添加Tomcat8.5的依賴庫,點擊OK

錯誤解決
1.手動安裝Eclipse maven-archetype-quickstart
下載
C:\Users\DELL
然后從CMD里手動安裝,
mvn install:install-file -DgroupId=org.apache.maven.archetypes -DartifactId=maven-archetype-quickstart -Dversion=X.X -Dpackaging=jar -Dfile=maven-archetype-quickstart-1.1.jar

2

解決一:

解決二:

案例三(創建一個service)
我們在之前(案例一)的基礎上 在web.xml檔案 配置一下
<servlet>
<description></description>
<display-name>HelloServlet</display-name>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>cn.atcast.web.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>

Run As---->Maven build

POM檔案內容:(重點)
定義:
pom: 專案物件模型 ,是一個 XML 檔案 包含了物件是 使用maven來構建 ,每個專案只有一個pom.xml檔案
概念:父POM 類似Object類

<?xml version="1.0" ?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hzg.maven</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version> 工程版本號
<name>Hello</name>
<url>http://maven.apache.org</url>
project:工程的根標簽
modelVersion:pom模板版本
groupId:組織標識 (一般唯一)
artifactId:工程名稱
packaging:打包方式:JAR ,WAR ,EAR 三種
//依賴配置資訊
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
<build>
<finalName>WebMavenDem</finalName>
</build>
</project>
parnt 父專案的資訊
modules 模塊
properties 定義pom變數 類似 int a;
dependencyManageMent 有多模塊時,統一子專案使用依賴項的同一版本 ,同時有了父模塊后 ,子模塊 就不會優先參考對應依賴 .同時 修改時 也只要改父類就可以了.

常用maven命令

執行maven命令必須進入到pom.xml的目錄中進行執行

進入到專案的pom.xml目錄之后,就可以執行啦,
1、運行 mvn compile

OK,運行完畢,你在pom.xml配置的依賴的包已經匯入到倉庫了,問題來了,倉庫默認的位置在哪?
倉庫的默認位置:c:Usrs[登錄當前系統的用戶名].m2repository
剛才執行完compile之后,之前的檔案夾發生了變化

我們發現Hello專案里里多了一個target檔案夾,檔案夾的內容為:

發現target里主要存放的就是編譯后的位元組碼檔案
2、運行mvn test-compile,target檔案夾下面除了classes之外多了test-classes檔案夾
3、運行mvn package,target檔案夾下面又多了一個打好的jar包
在這里插入圖片描述
4、運行mvn clean,發現整個target檔案夾都沒了,又回到了編譯之前我們手動創建的檔案夾
五、倉庫和坐標
① pom.xml:Project Object Model 專案物件模型,它是maven的核心組態檔,所有的構建的配置都在這里設定,
② 坐標:使用下面的三個向量在倉庫中唯一的定位一個maven工程

< packaging > :打包型別
jar:執行package會打成jar包
war:執行package會打成war包
pom :用于maven工程的繼承,通常父工程設定為pom
③ maven工程的坐標與倉庫中路徑的關系:

maven坐標和倉庫對應的映射關系:[ groupId ] [ artifactId ][version][artifactId]-[version].jar
去本地倉庫看一下此目錄:orgspringframeworkspring-core4.3.4.RELEASEspring-core-4.3.4.RELEASE.jar
果然是完全對應的
<project > :檔案的根節點 .
<modelversion > : pom.xml使用的物件模型版本
<groupId > :專案名稱,一般寫專案的域名
<artifactId > :模塊名稱,子專案名或模塊名稱
<version > :產品的版本號 .
<packaging > :打包型別,一般有jar、war、pom 等
<name > :專案的顯示名,常用于 Maven 生成的檔案,
<description > :專案描述,常用于 Maven 生成的檔案
<dependencies> :專案依賴構件配置,配置專案依賴構件的坐標
<build> :專案構建配置,配置編譯、運行插件等,
六、依賴
① maven決議依賴資訊時會到本地倉庫中取查找被依賴的jar包
對于本地倉庫中沒有的會去中央倉庫去查找maven坐標來獲取jar包,獲取到jar之后會下載到本地倉庫
對于中央倉庫也找不到依賴的jar包的時候,就會編譯失敗了
② 如果依賴的是自己或者團隊開發的maven工程,需要先使用install命令把被依賴的maven工程的jar包匯入到本地倉庫中
舉例:現在我再創建第二個maven工程HelloFriend,其中用到了第一個Hello工程里類的sayHello(String name)方法,我們在給HelloFriend專案使用 mvn compile命令進行編譯的時候,會提示缺少依賴Hello的jar包,怎么辦呢?
到第一個maven工程中執行 mvn install后,你再去看一下本地倉庫,你會發現有了Hello專案的jar包,一旦本地倉庫有了依賴的maven工程的jar包后,你再到HelloFriend專案中使用 mvn compile命令的時候,可以成功編譯
③ 依賴范圍


scope就是依賴的范圍
七、生命周期
Maven有三套相互獨立的生命周期,請注意這里說的是“三套”,而且“相互獨立”,初學者容易將Maven的生命周期看成一個整體,其實不然,這三套生命周期分別是:
① Clean Lifecycle 在進行真正的構建之前進行一些清理作業,Clean生命周期一共包含了三個階段:
| pre-clean | 執行一些需要在clean之前完成的作業 |
|---|---|
| clean | 移除所有上一次構建生成的檔案 |
| post-clean | 執行一些需要在clean之后立刻完成的作業 |
② Default Lifecycle 構建的核心部分,編譯,測驗,打包,部署等等,
| validate | 驗證工程是否正確(編譯) |
|---|---|
| generate-sources | |
| process-resources | 復制并處理資源檔案,至目標目錄,準備打包 |
| compile 編譯專案的源代碼 | |
| process-classes | |
| generate-test-sources | |
| process-test-sources | |
| generate-test-resources | |
| process-test-resources | 復制并處理資源檔案,至目標測驗目錄 |
| test-compile | 編譯測驗源代碼 |
| process-test-classes | |
| test | 使用合適的單元測驗框架運行測驗,這些測驗代碼不會被打包或部署 |
| prepare-package | |
| package | 接受編譯好的代碼,打包成可發布的格式, |
| pre-integration-test | |
| integration-test | |
| post-integration-test | |
| verify | 運行所有檢查,驗證包是否有效 |
| install | 將包安裝至本地倉庫,以讓其它專案依賴, |
| deploy | 將最終的包復制到遠程的倉庫,以讓其它開發人員與專案共享 |
那我們在Hello的專案中執行 mvn install 命令,通過日志看看中間經歷了什么?

通過日志我們發現,其實執行mvn install,其中已經執行了compile 和 test ,
總結:不論你要執行生命周期的哪一個階段,maven都是從這個生命周期的開始執行
插件:每個階段都有插件(plugin),看上面標紅的,插件的職責就是執行它對應的命令,
③ Site Lifecycle 生成專案報告,站點,發布站點,
| pre-site | 執行一些需要在生成站點檔案之前完成的作業 |
|---|---|
| site | 生成專案的站點檔案 |
| post-site | 執行一些需要在生成站點檔案之后完成的作業,并且為部署做準備 |
| site-deploy | 將生成的站點檔案部署到特定的服務器上 |
九、maven工程的依賴高級特性
① 依賴的傳遞性

WebMavenDemo專案依賴JavaMavenService1 JavaMavenService1專案依賴JavaMavenService2
pom.xml檔案配置好依賴關系后,必須首先mvn install后,依賴的jar包才能使用,
WebMavenDemo的pom.xml檔案想能編譯通過,JavaMavenService1必須mvn install
JavaMavenService的pom.xml檔案想能編譯通過,JavaMavenService2必須mvn install
傳遞性:

在Eclipse中,為JavaMavenService2中增加了一個spring-core.jar包后,會驚喜的發現依賴的兩個專案都自動的增加了這個jar包,這就是依賴的傳遞性,
注意:非compile范圍的依賴是不能傳遞的,
② 依賴版本的原則:
1、路徑最短者優先原則

Service2的log4j的版本是1.2.7版本,Service1排除了此包的依賴,自己加了一個Log4j的1.2.9的版本,那么WebMavenDemo專案遵守路徑最短優先原則,Log4j的版本和Sercive1的版本一致,
2、路徑相同先宣告優先原則

這種場景依賴關系發生了變化,WebMavenDemo專案依賴Sercive1和Service2,它倆是同一個路徑,那么誰在WebMavenDemo的pom.xml中先宣告的依賴就用誰的版本,
③ 統一管理依賴的版本:

為了統一管理版本號,可以使用properties標簽,里面可以自定義版本的標簽名,在使用的地方使用${自定義標簽名}
build配置
<build>
<!-- 專案的名字 -->
<finalName>WebMavenDemo</finalName>
<!-- 描述專案中資源的位置 -->
<resources>
<!-- 自定義資源1 -->
<resource>
<!-- 資源目錄 -->
<directory>src/main/java</directory>
<!-- 包括哪些檔案參與打包 -->
<includes>
<include>**/*.xml</include>
</includes>
<!-- 排除哪些檔案不參與打包 -->
<excludes>
<exclude>**/*.txt</exclude>
<exclude>**/*.doc</exclude>
</excludes>
</resource>
</resources>
<!-- 設定構建時候的插件 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.1</version>
<configuration>
<!-- 源代碼編譯版本 -->
<source>1.8</source>
<!-- 目標平臺編譯版本 -->
<target>1.8</target>
</configuration>
</plugin>
<!-- 資源插件(資源的插件) -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<phase>compile</phase>
</execution>
</executions>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- war插件(將專案打成war包) -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1</version>
<configuration>
<!-- war包名字 -->
<warName>WebMavenDemo1</warName>
</configuration>
</plugin>
</plugins>
</build>

配置好build后,執行mvn package之后,在maven工程指定的target目錄里war包和檔案都按照配置的生成了
加入第三方架包

Maven私服
- 問題:專案組撰寫了一個通用的工具類,其它專案組將類拷貝過去使用,當工具類修改bug后通過郵件發送給各各專案組,這種分發機制不規范可能導致工具類版本不統一,
解決方案:專案組將寫的工具類通過maven構建,打成jar,將jar包發布到公司的maven倉庫中(私服),公司其它專案通過maven依賴管理從倉庫自動下載jar包,
私服(用于jar的發布 和下載)
-
公司在自己的局域網內搭建自己的遠程倉庫服務器,稱為私服私服服務器即是公司內部的maven遠程倉庫,每個員工的電腦上安裝maven軟體并且連接私服服務器,員工將自己開發的專案打成jar并發布到私服服務器,其它專案組從私服服務器下載所依賴的構件(jar),
-
私服還充當一個代理服務器,當私服上沒有jar包會從互聯網中央倉庫自動下載

依賴版本沖突
依賴版本沖突:當一個專案依賴的構件比較多時,它們相互之前存在依賴,當你需要對依賴版本統一管理時如果讓maven自動來處理可能并不能如你所愿,如下例子:
(傳遞依賴:當A 依賴B、B依賴C,在A中匯入B后會自動匯入C,C是A的傳遞依賴,如果C依賴D則D也可能是A的傳遞依賴,)
<!-- struts2-spring-plugin依賴spirng-beans-3.0.5 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.3.24</version>
</dependency>
<!-- spring-context依賴spring-beans-4.2.4 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
org.apache.struts依賴spirng-beans-3.0.5,spring-context依賴spring-beans-4.2.4,但是發現spirng-beans-3.0.5加入到工程中,而我們希望spring-beans-4.2.4加入工程,
依賴調解原則
maven自動按照下邊的原則調解:
宣告者優先原則
在pom檔案定義依賴,先宣告的依賴為準,
測驗:
如果將上邊struts-spring-plugins和spring-context順序顛倒,系統將匯入spring-beans-4.2.4,
分析:
由于spring-context在前邊,以spring-context依賴的spring-beans-4.2.4為準,所以最終spring-beans-4.2.4添加到了工程中,
排除依賴
上邊的問題也可以通過排除依賴方法輔助依賴調解,如下:
比如在依賴struts2-spring-plugin的設定中添加排除依賴,排除spring-beans,
下邊的配置表示:依賴struts2-spring-plugin,但排除struts2-spring-plugin所依賴的
spring-beans,
<!-- struts2-spring-plugin依賴spirng-beans-3.0.5 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.3.24</version>
<!-- 排除 spring-beans-->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
</exclusions>
</dependency>
鎖定版本
面對眾多的依賴,有一種方法不用考慮依賴路徑、宣告優化等因素可以采用直接鎖定版本的方法確定依賴構件的版本,版本鎖定后則不考慮依賴的宣告順序或依賴的路徑,以鎖定的版本的為準添加到工程中,此方法在企業開發中常用,
首先父工程中pom.xml檔案添加
如下的配置是鎖定了spring-beans和spring-context的版本:

最后推薦個最新最全的maven依賴項版本查詢網站:
http://mvnrepository.com/
-
創建 maven maven-archetype-quickstart 專案抱錯問題解決方法
-
Archetype,骨架的意思,
文章出處:http://m.blog.csdn.net/blog/FireOfStar/42526027
Archetype是什么?
簡單的說,Archetype是Maven工程的模板工具包,一個Archetype定義了要做的相同型別事情的初始樣式或模型,這個名稱給我們提供來了一個一致的生成Maven工程的方式,Archetype會幫助作者給用戶創建Maven工程模板,并給用戶提供生成相關工程模板版本的引數化方法,
使用Archetype提供的好的方法,是開發者能夠使用最佳實踐來快速的構建和組織一致化的工程,在Maven工程中,我們努力使用Archetype來盡可能快的給用戶提供示例工程,同時也會把Maven的最佳實踐介紹給新的用戶,一個新的用戶可以使用作業中的Maven作業作為跳板來研究更過的Maven中功能,我們也可以使用Archetype的添加機制,這樣就意味著允許我們抓取Archetype中專案片段,并把它們添加到既存的工程中,Maven網站的Archetype就是很好的例子,例如,你可以使用“quick start archetype”來生成一個工程,然后就可以通過其中既存的“site archetype”來快速的創建一個網址工程,你能夠使用Archetype來做很多這樣的事情,
在你的團隊中可能想要標準化的J2EE開發,這需要你提供EJBs、或者是WARs、或者是Web services的原型,一旦在你團隊資源庫中創建和部署這些原型,它們就可以在你團隊內共享使用,
如何使用Archetype
要基于Archetype來創建一個新的工程,需要像下面示例這樣來呼叫:
mvn archetype:generate
已有的Archetypes
Archetype ID
說明
maven-archetype-archetype
一個樣例原型
maven-archetype-j2ee-simple
簡單的J2EE應用程式樣例
maven-archetype-mojo
Maven插件樣本的示例
maven-archetype-plugin
Maven插件樣本
maven-archetype-plugin-site
Mave插件網站的樣例
maven-archetype-portlet
JSR-268門戶樣例
maven-archetype-quickstart
Maven工程樣例
maven-archetype-simple
一個簡單的Maven工程
maven-archetype-site
Maven網站的樣例,它演示了對諸如APT、XDoc和FML等檔案型別的支持,并演示了如果把網站國際化(i18n)
maven-archetype-site-simple
Maven網站樣例
maven-archetype-webapp
Maven的Webapp工程樣例
常用Archetype
1,maven-archetype-quickstart
默認的Archetype,基本內容包括:
一個包含junit依賴宣告的pom.xml
src/main/java主代碼目錄及一個名為App的類
src/test/java測驗代碼目錄及一個名為AppTest的測驗用例
2,maven-archetype-webapp
一個最簡單的Maven war專案模板,當需要快速創建一個Web應用的時候可以使用它,生成的專案內容包括:
一個packaging為war且帶有junit依賴宣告的pom.xml
src/main/webapp/目錄
src/main/webapp/index.jsp檔案
src/main/webapp/WEB-INF/web.xml檔案
pom.xml 組態檔 如果第一次的話 可以復制下來 幫助你下載完整插件 最后檢查 對不對標志(目錄結構是否正確)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.alipay.test</groupId>
<artifactId>test</artifactId>
<version>1.0-SNAPSHOT</version>
<name>test</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>3.0.0</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId>
<version>1.10</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.11</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/4691.html
標籤:java
