maven作為一個高度自動化構建工具,本身提供了構建項目的功能,下面就來體驗一下使用maven構建項目的過程。
一、構建Java項目
1.1、創建Java 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 -DarchetypeGroupId=org.apache.wicket -DarchetypeArtifactId=wicket-archetype-quickstart -DarchetypeVersion=1.4.9 -DgroupId=com.mycompany -DartifactId=myproject -DarchetypeCatalog=internal
使用"mvn archetype:create"命令創建一個java項目的過程如下圖所示:
值得注意的是出現了這個錯誤
用create方法創建項目的時候報錯了,用generate可以 是因為 :
archetype:create 這個命令在maven 3.02以上的版本已經不用了, 用generate 命令代替
請參考官方文檔
archetype:create
Full name:
org.apache.maven.plugins:maven-archetype-plugin:2.4:create
This plugin goal has been deprecated:
Please use the generate mojo instead。
需要耐心等待3分鐘左右才好
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文件的內容如下:
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插件,如下:
接著就可以在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對于項目開發是非常有幫助的。
文章列表