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-quickstart和maven-archetype-webapp骨架。maven-archetype-quickstart骨架是用來建立一個Java Project,而maven-archetype-webapp骨架則是用來建立一個JavaWeb Project。
不得不說,Maven的確是一個很好的專案構建工具。掌握好Maven對於專案開發是非常有幫助的。