當前位置:編程學習大全網 - 源碼下載 - Maven 是怎樣創建War 包

Maven 是怎樣創建War 包

轉載 最近在網上看到壹篇介紹maven基礎知識的文章,覺得對初學Maven的朋友壹定有幫助。水平有限,翻譯的不好,請大家見諒。

介紹

在處理WEB應用的時候,最終使用的工程文件是以War包的形式交付。Maven編譯系統可以輕松的創建War包。接下來就讓我們看看Maven是如何把壹個源文件的工程轉換成War包的。

Maven 版本 Apache Maven 3.0.4

工程實例

讓我們來看看這個非常典型的Maven化的WEB工程

對應的POM.xml如下:

我們用此命令War包

1 mvn package

War生成在根目錄下

1 /target/myprojectname.war

如下圖,概況Maven生成War包過程

Maven 默認配置

我們都知道Maven可以很容易的把源文件工程創建為War包,但是POM文件中什麽也沒有設置。這是怎麽回事啊?實際上Maven有自己默認的設置。這稱之為 “convention over configuration”,Maven在配置中提供默認值。

第壹,因為有壹些Maven插件本身就與Maven 的生命周期綁定在壹起。例如,在編譯階段使用

compiler:compile 作為默認命令。這就意味著當執行到編譯階段compiler plugin 被調用執行。如果選擇生成WAR,那麽 war:war 會與這個階段綁定。

第二,當沒有明確設置參數的時候,插件都會有自己默認值。例如 compiler:compile 目標有個參數是 compilerId。當默認值是 javac就意味著JDK 會被使用。當需要生成其他形式時可以重寫此配置。

第三,壹些設置包含在 Super POM,此文件是POM文件默認繼承的。從Mavne3 起 Super POM 被放在

1 maven_dir/lib/maven-model-builder-3.0.3.jar:org/apache/maven/model/pom-4.0.0.xml

在這裏我們可以發現很多默認的配置信息

Maven 生命周期

在我們的工程中,當執行 mvn package 命令,maven會執行它整個生命周期中的六個階段

1 process-resources, compile, process-test-resources, test-compile, test and package

每個階段會包含壹個或多個目標。Maven 插件提供目標:壹個插件可以有壹個或多個目標。例如

Compiler 插件有兩個目標:compiler:compile 和 compiler:testCompile

我們可以使用 mvn help:describe -Dcmd=phasename 命令列出如下內容

下面讓我們看看每個目標

1.resources:resources

此目標用來將資源文件夾下的內容拷貝到輸出目錄

2.compiler:compile

此目標編譯源項目工程

3.resources:testResources

此目標拷貝測試資源到測試輸出目錄

4.compiler:testCompile

此目標編譯測試項目

5.surefire:test

此目標執行工程的單元測試,編譯的測試類放在 /target/test-classes

6.war:war

此目錄創建War包。它會把所有需要的文件放在

1 /target/myprojectname/

而後將他們打包生成 **.war。其中壹個步驟是將 /src/main/webapp/ 拷貝到輸出目錄。

War插件另外壹個重要步驟是拷貝Class文件到到 WEB-INF/classes目錄和項目所依賴的jar包到 WEB-INF/lib目錄。

默認情況下,插件還包含兩個Maven描述文件:

META-INF/maven/${groupId}/${artifactId}/pom.xml

pom.properties 文件,META-INF/maven/${groupId}/${artifactId}/pom.properties

1 #Generated by Maven

2 #Sat May 12 00:50:42 CEST 2012

3 version=1.0-SNAPSHOT

4 groupId=mygroup.com

5 artifactId=myprojectname

最終的War包放在/target/目錄下。

項目依賴

pom.xml文件會有壹個默認的(JUnit)依賴。我們可以加另外壹個常用的Jar log4j。

1

2 log4j

3 log4j

4 1.2.16

5

當沒有設置依賴範圍 ( scope),默認為 compile scope。這就意味著此依賴在編譯、測試、運行階段都可以得到。

只要是運行中會用到的jar包,都會拷貝到 /WEB-INF/lib目錄

轉載

  • 上一篇:請問CPI、CIP、DIY是什麽意思?
  • 下一篇:App分享站源代碼
  • copyright 2024編程學習大全網