python類與繼承
瞭解
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包,並放入本地倉庫以備將來使用。
優先從本地倉庫查詢
預設本地倉庫位置在
u
s
e
r
.
d
i
r
/
.
m
2
/
r
e
p
o
s
i
t
o
r
y
,
{user.dir}/.m2/repository,
user.dir/.m2/repository,{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>