1. 程式人生 > >Maven學習總結(三)——使用Maven構建專案

Maven學習總結(三)——使用Maven構建專案

 maven作為一個高度自動化構建工具,本身提供了構建專案的功能,下面就來體驗一下使用maven構建專案的過程。

一、構建Jave專案

1.1、建立Jave Project

  1、使用mvn archetype:generate命令,如下所示:

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=myapp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

  2、使用mvn archetype:create命令,如下所示:

mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=myapp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

  使用"mvn archetype:generate"命令和"mvn archetype:create"都可以建立專案,目前沒有發現這兩者的區別,唯一區別的地方就是發現使用"mvn archetype:generate"命令建立專案時要特別長的時間才能夠將專案建立好,而使用"mvn archetype:create

"命令則可以很快將專案創建出來。

  使用"mvn archetype:create"命令建立一個java專案的過程如下圖所示:

  

  BUILD SUCCESS就表示專案構建成功,當在前使用者目錄下(即C:\Documents and Settings\Administrator)下構建了一個Java Project叫做myapp。

  構建好的Java專案的目錄結構如下:

  

  可以看到,Maven幫我們建立的專案是一個標準的Maven專案,不過目前Maven只是幫我們生成了src/main/java(存放專案的原始碼)和src/test/java(存放測試原始碼)這兩個目錄,但實際專案開發中我們一般都會有配置檔案,例如log4j.properties,所以我們還需要手動建立src/main/resources(存放專案開發中用到的配置檔案,如存放log4j.properties等)和src/test/resources(存放測試時用到的配置檔案),如下圖所示:

  

  然後我們就可以將建立好的myapp專案匯入到Eclipse中進行開發了,如下圖所示:

  

1.2、JavaProject的pom.xml檔案說明

  通過Maven構建的JavaProject,在專案的根目錄下都會存在一個pom.xml檔案,進入myapp目錄,可以看到有一個pom.xml檔案,這個檔案是Maven的核心。如下圖所示:

    1、pom意思就是project object model。

    2、pom.xml包含了專案構建的資訊,包括專案的資訊、專案的依賴等。

    3、pom.xml檔案是可以繼承的,大型專案中,子模組的pom.xml一般都會繼承於父模組的pom.xml

  pom.xml檔案的內容如下:

複製程式碼

 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3   <modelVersion>4.0.0</modelVersion>
 4 
 5   <groupId>com.mycompany.app</groupId>
 6   <artifactId>myapp</artifactId>
 7   <version>1.0-SNAPSHOT</version>
 8   <packaging>jar</packaging>
 9 
10   <name>myapp</name>
11   <url>http://maven.apache.org</url>
12 
13   <properties>
14     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
15   </properties>
16 
17   <dependencies>
18     <dependency>
19       <groupId>junit</groupId>
20       <artifactId>junit</artifactId>
21       <version>3.8.1</version>
22       <scope>test</scope>
23     </dependency>
24   </dependencies>
25 </project>

複製程式碼

  pom.xml檔案的節點元素說明:

    <project>       pom檔案的頂級節點
    <modelVersion>     object model版本,對Maven2和Maven3來說,只能是4.0.0 
    <groupId>       專案建立組織的識別符號,一般是域名的倒寫
    <artifactId>      定義了專案在所屬組織的識別符號下的唯一標識,一個組織下可以有多個專案
    <version>        當前專案的版本,SNAPSHOT,表示是快照版本,在開發中

    <packaging>      打包的方式,有jar、war、ear等
    <name>        專案的名稱
    <url>          專案的地址

    <properties>    屬性配置,比如:<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <dependencies>     構建專案依賴的jar

  其中由groupId、artifactId和version唯一的確定了一個專案座標

1.3、使用Maven編譯-測試-打包-安裝專案

1.3.1、編譯

  編譯源程式,進入命令列,切換到myapp目錄,執行命令:mvn clean compile,如下圖所示:

  

  編譯成功,在myapp目錄下多出一個target目錄,target\classes裡面存放的就是編譯後的class檔案,如下圖所示:

  

1.3.2、測試

  進入命令列,切換到myapp目錄,執行命令:mvn clean test,如下圖所示:

  

  測試成功,在myapp\target目錄下會有一個test-classes目錄,存放的就是測試程式碼的class檔案,如下圖所示:

  

1.3.3、打包

  進入命令列,切換到myapp目錄,執行命令:mvn clean package,執行打包命令前,會先執行編譯和測試命令,如下圖所示:

  

  

  構建成功後,會在target目錄下生成myapp-1.0-SNAPSHOT.jar包,如下圖所示:

  

1.3.4、安裝

  進入命令列,切換到my-app目錄,執行命令:mvn clean install ,執行安裝命令前,會先執行編譯、測試、打包命令,如下圖所示:

  

  

  構建成功,就會將專案的jar包安裝到本地倉庫,如下圖所示:

  

1.3.5、執行jar包

  進入命令列,切換到myapp目錄,執行命令:java -cp target\myapp-1.0-SNAPSHOT.jar com.mycompany.app.App,如下圖所示:

  

二、構建JavaWeb專案

2.1、建立JavaWeb專案

  1、使用mvn archetype:generate命令,如下所示:

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-WebApp -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

  使用"mvn archetype:generate"命令建立一個javaWeb專案的過程如下圖所示:  

  

  使用"mvn archetype:generate"命令建立一個javaWeb專案的時間非常長,要了40多秒,有時甚至會更久,不知道為啥。

  2、使用mvn archetype:create命令,如下所示:

mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=myWebApp -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

  使用"mvn archetype:create"命令建立一個javaWeb專案的過程如下圖所示:  

  

  使用"mvn archetype:create"命令建立一個javaWeb專案的時間非常快,幾秒鐘就可以了。

  建立好的JavaWeb專案的目錄結構如下:

  

  建立好的JavaWeb專案中目前只有src/main/resources目錄,因此還需要手動新增src/main/java、src/test/java、src/test/resources

  如下圖所示:

  

  接著我們就可以將建立好的JavaWeb匯入Eclipse中進行開發了,如下圖所示:

  

2.2、使用Maven打包釋出Web專案

  Maven幫我們建立的JavaWeb專案是一個空的專案,只有一個index.jsp頁面,我們使用Maven將Web專案打包釋出執行。

  在命令列切換到myWebApp目錄,執行:mvn package,構建成功後,myWebApp目錄目錄下多了一個target目錄,在這個目錄下會打包成myWebApp目錄.war,把這個war包拷貝到Tomcat的釋出目錄下就可以運行了。如下圖所示:

  

  

  打包成功,在myWebApp\target目錄下生成了一個myWebApp.war檔案,如下圖所示:

  

  將myWebApp.war放到tomcat伺服器中執行,如下圖所示:

  

  執行效果如下:

  

  除了使用Tomcat伺服器執行Web專案之外,我們還可以在Web專案中整合Jetty釋出執行,首先在pom.xml檔案中配置Jetty外掛,如下:

複製程式碼

 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 3   <modelVersion>4.0.0</modelVersion>
 4   <groupId>com.mycompany.app</groupId>
 5   <artifactId>myWebApp</artifactId>
 6   <packaging>war</packaging>
 7   <version>1.0-SNAPSHOT</version>
 8   <name>myWebApp Maven Webapp</name>
 9   <url>http://maven.apache.org</url>
10   <dependencies>
11     <dependency>
12       <groupId>junit</groupId>
13       <artifactId>junit</artifactId>
14       <version>3.8.1</version>
15       <scope>test</scope>
16     </dependency>
17   </dependencies>
18   <build>
19     <finalName>myWebApp</finalName>
20      <pluginManagement>
21         <!--配置Jetty-->
22           <plugins>
23             <plugin>
24              <groupId>org.mortbay.jetty</groupId>   
25              <artifactId>maven-jetty-plugin</artifactId>
26             </plugin>
27           </plugins>
28     </pluginManagement>
29   </build>
30 </project>

複製程式碼

  開啟命令列視窗,切換到myWebApp目錄,然後執行:mvn jetty:run啟動Jetty伺服器,如下圖所示:

  

  

  接著就可以在8080埠上訪問應用了。如下圖所示:

  

三、Maven建立專案的命令說明

  mvn archetype:create或者mvn archetype:generate  固定寫法

  -DgroupId                       組織標識(包名)

  -DartifactId                      專案名稱

  -DarchetypeArtifactId                  指定ArchetypeId,maven-archetype-quickstart,建立一個Java Project;maven-archetype-webapp,建立一個Web Project

  -DinteractiveMode                    是否使用互動模式

  archetype是mvn內建的一個外掛,create任務可以建立一個java專案骨架,DgroupId是軟體包的名稱,DartifactId是專案名,DarchetypeArtifactId是可用的mvn專案骨架,目前可以使用的骨架有:

  • maven-archetype-archetype
  • maven-archetype-j2ee-simple
  • maven-archetype-mojo
  • maven-archetype-portlet
  • maven-archetype-profiles (currently under development)
  • maven-archetype-quickstart
  • maven-archetype-simple (currently under development)
  • maven-archetype-site
  • maven-archetype-site-simple
  • maven-archetype-webapp

  每一個骨架都會建相應的目錄結構和一些通用檔案,最常用的是maven-archetype-quickstartmaven-archetype-webapp骨架。maven-archetype-quickstart骨架是用來建立一個Java Project,而maven-archetype-webapp骨架則是用來建立一個JavaWeb Project。

  不得不說,Maven的確是一個很好的專案構建工具。掌握好Maven對於專案開發是非常有幫助的。