摘要:添加的的依賴,可以從項(xiàng)目的中拷貝使用命令編譯項(xiàng)目。在子模塊中我們可以這樣使用引入父模塊坐標(biāo)三使用建立項(xiàng)目新建一個項(xiàng)目,選擇,如圖所示在中配置插件可參見官方文檔。部署項(xiàng)目到即可。
一、Maven入門 1.下載maven
Maven是基于項(xiàng)目對象模型(Project Object Model),可以通過一小段描述信息來管理項(xiàng)目的構(gòu)建、報告和文檔的項(xiàng)目管理工具,提供了一個倉庫的概念,統(tǒng)一管理項(xiàng)目所依賴的第三方j(luò)ar包,最大可能避免了由于環(huán)境變量的不同在不同電腦之間無法運(yùn)行的問題,Struts2、Hibernate都是采用maven部署的項(xiàng)目。它是Apache軟件基金會的一個開源項(xiàng)目,下載地址是:Apache Maven 注意:Maven3.3要求jdk版本為1.7及以上。將壓縮包解壓到任意目錄:可以看到如下的目錄結(jié)構(gòu):
新建環(huán)境變量M2_HOME,其值為maven的解壓目錄,并在path環(huán)境變量中引用M2_HOME下的bin目錄:
shellM2_HOME:D:Program Files (x86)apache-maven-3.3.3 Path:...;%M2_HOME%in
接下來在命令行輸入mvn -v命令可以查看版本:
首先創(chuàng)建如下的目錄結(jié)構(gòu)
src |----main |----java |----package |----test |----java |----package |----resources pom.xml
在main/java目錄下創(chuàng)建我們的java源代碼:
javapackage org.gpf.maventest01.model; public class HelloWorld { public String sayHelloWorld(){ return "Hello World!"; } }
在test/java目錄下創(chuàng)建我們的測試代碼(使用了Junit4測試框架):
javapackage org.gpf.maventest01.model; import org.junit.*; import static org.junit.Assert.*; public class HelloWorldTest { @Test public void testSayHelloWorld(){ assertEquals("Hello World!",new HelloWorld().sayHelloWorld()); } }
接下來編寫pom.xml(可以參見Struts2,如圖所示)
將其拷貝到項(xiàng)目的根目錄,并修改為如下:
xml4.0.0 org.gpf.maventest01 maventest01 0.0.1SNAPSHOT junit junit 4.10
接下來在命令行進(jìn)入我們的項(xiàng)目輸入mvn compile命令(首次運(yùn)行會下載第三方插件和maven依賴的jar,請耐心等待),對該項(xiàng)目進(jìn)行編譯。
最后使用mvn test命令運(yùn)行我們的測試用例:
此時發(fā)現(xiàn)項(xiàng)目的根目錄下多了一個target目錄,其中class目錄就是生成的類文件,reports目錄就是一系列測試報告。
運(yùn)行mvn package命令可以打包我們的項(xiàng)目,會生成maventest-0.0.1SNAPSHOT.jar。
二、Maven核心知識 1.常用構(gòu)建命令mvn -v 查看maven版本
compile 編譯
test 測試
package 打包
clean 刪除target(字節(jié)碼和測試報告)
install 安葬jar包到本地倉庫
如果一個項(xiàng)目需要利用到其他項(xiàng)目的jar包,一種方式是拷貝jar包并拷貝到classpath中,maven提供了一個更簡單的策略,直接在本地倉庫中查找即可。例如我們一個新的項(xiàng)目maven02項(xiàng)目需要使用到之前的maven01項(xiàng)目的HelloWorld類中的sayHelloWorld方法,使用maven可以這樣:
在maven01項(xiàng)目中運(yùn)行mvn install命令安裝jar包到本地倉庫。
創(chuàng)建maven02項(xiàng)目,在其中導(dǎo)入maven01項(xiàng)目的類。
src/main
javapackage org.gpf.maventest02.util; import org.gpf.maventest01.model.HelloWorld; public class Speak { public String sayHi(){ return new HelloWorld().sayHelloWorld(); } }
src/test
javapackage org.gpf.maventest02.util; import org.junit.*; import static org.junit.Assert.*; public class SpeakTest { @Test public void testSayHi(){ assertEquals("Hello World!",new Speak().sayHi()); } }
3.在pom.xml添加依賴。
xml4.0.0 org.gpf.maventest02 maventest02 0.0.1SNAPSHOT junit junit 4.10 org.gpf.maventest01 maventest01 0.0.1SNAPSHOT
使用mvn compile命令編譯maven02項(xiàng)目。
2.使用archetype插件自動創(chuàng)建符合maven的目錄骨架方式一:使用mvn archetype:generate根據(jù)提示一步步操作;
方式二:使用mvn archetype:generate -D命令一次性生成全部。
3.maven中的坐標(biāo)和倉庫maven中任何一個依賴、插件都可以被稱為構(gòu)件。所有構(gòu)件通過坐標(biāo)作為其唯一標(biāo)識。
倉庫可以管理項(xiàng)目的依賴。倉庫可以分為本地倉庫和遠(yuǎn)程倉庫,如果本地倉庫中找不到就會在遠(yuǎn)程倉庫中查找并下載,如果遠(yuǎn)程倉庫找不到就會報錯。maven遠(yuǎn)程倉庫的地址可以在maven安裝目錄的lib目錄的maven-model-builder-3.3.3.jar中找到,如圖所示:
將pom.xml打開。
由于maven的中央倉庫位于國外,速度慢,也有可能其他原因無法訪問,我們可以使用國內(nèi)的鏡像倉庫。配置鏡像倉庫需要修改conf/settings.xml,打開該文件修改mirror標(biāo)簽如下:
xmlmaven.net.cn central central mirror in china http://maven.net.cn/content/groups/public
maven倉庫默認(rèn)是放在用戶目錄的.m2隱藏目錄下的,Windows系統(tǒng)就是C:Users用戶名.m2,我們需要將倉庫遷移到其他目錄,修改conf/settings.xml,如圖所示:
將settings.xml復(fù)制到E:/tmp/mavenproject/repo,這樣更新maven就不需要重新配置settings.xml了。
4.在MyEclipse中使用mavenMyEclipse默認(rèn)安裝了maven插件,極大簡化了操作。在使用MyEclipse創(chuàng)建項(xiàng)目之前需要進(jìn)行如下的配置:
配置maven安裝目錄(自帶的可能有錯)
給jre添加一個運(yùn)行時參數(shù)(錯誤-Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable and mvn script match.的解決方案)
使用MyEclipse創(chuàng)建Maven項(xiàng)目的步驟(注意選擇合適的Junit版本,默認(rèn)是3.8.1,我們需要該變成4.10)如下:
接下來在MyEclipse中運(yùn)行maven項(xiàng)目,右鍵項(xiàng)目名---Run As會出現(xiàn)如下菜單:
在彈出的的對話框的Goals中輸入maven命令(compile、test、package等)即可。
5.maven的生命周期和插件maven有3個獨(dú)立的階段。
clean(清理)pre-clean
clean
post-clean
default(構(gòu)建、最核心)compile
test
package
install
site(生成項(xiàng)目站點(diǎn))pre-site
site(生成項(xiàng)目的站點(diǎn)文檔)
post-site
site-deploy(發(fā)布站點(diǎn)到服務(wù)器)
Maven是基于插件的,我們可以在http://maven.apache.org/plugins/index.html找到合適的插件,例如源代碼打包插件source插件。
編輯pom.xml,配置source插件(可以參見source插件文檔)
xml... ... org.apache.maven.plugins maven-source-plugin 2.4 package jar-no-fork
使用clean package命令,運(yùn)行結(jié)果:
xml7.依賴范圍4.0.0 org.gpf.maventest maventest-demo 0.0.1-SNAPSHOT jar maventest-demo http://maven.apache.org UTF-8 junit junit 4.10 test org.apache.maven.plugins maven-source-plugin 2.4 package jar-no-fork
maven提供了3種classpath(編譯、測試、運(yùn)行),例如上面的pom.xml的Junit框架的scope屬性為test。http://maven.apache.org/guides/introduction/introduction-to-dependency...上提供了6種依賴范圍:
compile:缺省值,編譯、測試都有效
provided:編譯,測試都有效,但是在運(yùn)行時并不會加入。例如Servlet API,因?yàn)閃eb容器本身有,如果加入就會出現(xiàn)沖突。
runtime:測試、運(yùn)行有效。
test:僅測試時有效。
system:與本機(jī)相關(guān),可移植性差。
import:導(dǎo)入的依賴范圍,僅適用在dependencyManager中,表示從其他pom導(dǎo)入dependency配置。
8.依賴傳遞創(chuàng)建3個maven項(xiàng)目,grandfather、father、son,其中father依賴grandfather,son又依賴father,他們之間構(gòu)成依賴。
例如在Father項(xiàng)目的pom.xml中添加對GradFather的依賴,只需要在dependency標(biāo)簽中指定GrandFather的坐標(biāo)即可,就像下面這樣:
xmljunit junit 3.8.1 test com.maventest GrandFather 0.0.1-SNAPSHOT
類似的在Son項(xiàng)目中添加對Father的依賴?,F(xiàn)在構(gòu)建Son需要先構(gòu)建GrandFather和Father。對GrandFather和Father進(jìn)行clean install命令,再對Son項(xiàng)目進(jìn)行compile命令即可。構(gòu)建完成后3個項(xiàng)目的目錄結(jié)構(gòu)如圖:
此時發(fā)現(xiàn)Son依賴了2個項(xiàng)目GrandFather和Father,如果僅僅希望Son依賴Father可以將GrandFather的坐標(biāo)進(jìn)行依賴排除:
xml9.依賴沖突com.maventest Father 0.0.1-SNAPSHOT com.maventest GrandFather
依賴沖突有2條原則:
短路優(yōu)先(優(yōu)先解析路徑短的版本),例如有以下2個依賴:A-->B-->C-->x.jar,A-->D--x.jar(優(yōu)先)
路徑相同,先聲明先優(yōu)先。
10.聚合與繼承如果我們的項(xiàng)目要使用到以上的GrandFather、Father、Son3個模塊,就可以使用聚合。新建一個relationship項(xiàng)目,修改其pom.xml如下:
``` 在relationship項(xiàng)目運(yùn)行`clean install`命令將會依次生成3個jar并加入本地倉庫。 在以上的項(xiàng)目中項(xiàng)目中每次都要配置Junit的依賴,我們可以向java編程那樣將公共的模塊抽取出來,這種方式叫做繼承。新建一個maven項(xiàng)目,命名為common,其`pom.xml`配置如下: ```xml 4.0.0 com.maventest relationship 0.0.1-SNAPSHOT pom relationship http://maven.apache.org UTF-8 junit junit 3.8.1 test ../GrandFather ../Father ../Son 4.0.0 com.maventest.common common 0.0.1-SNAPSHOT pom common http://maven.apache.org UTF-8 3.8.1 junit junit ${junit-version} test
這是項(xiàng)目可能有紅色的小叉,由于父模塊不需要測試,我們可以刪除src/test重新更新maven項(xiàng)目(右鍵項(xiàng)目-->Maven ForMyEclipse-->Update Project Configuration),發(fā)現(xiàn)紅色的叉消失。在子模塊中我們可以這樣使用:
xml三、使用Maven建立Web項(xiàng)目4.0.0 com.maventest GrandFather 0.0.2-SNAPSHOT jar GrandFather http://maven.apache.org UTF-8 com.maventest.common common 0.0.1-SNAPSHOT junit junit
新建一個maven項(xiàng)目,ArcheType選擇webapp,如圖所示:
在pom.xml中配置tomcat插件(可參見Tomcat官方文檔)。
xml4.0.0 com.maventest.webdemo webdemo war 0.0.1-SNAPSHOT webdemo Maven Webapp http://maven.apache.org junit junit 4.10 test webdemo org.apache.tomcat.maven tomcat7-maven-plugin 2.2
clean-->package-->部署項(xiàng)目到Tomcat即可。
四、常見問題和解決方案 1.jdk版本不符合的問題Eclipse中的jdk版本顯示為1.5,但是編譯使用的版本是1.7,可以參考以下的conf/settings.xml的配置:
xmljdk-1.7 true 1.7 1.7 1.7 1.7
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64421.html
摘要:軟件項(xiàng)目的管理就會變得簡單很多。比如說的驅(qū)動程序,,在是獲取不到的,就需要手工上傳到里是倉庫組,在里沒有這個概念,是特有的。 什么是Maven Maven是一個采用純Java編寫的開源項(xiàng)目管理工具, Maven采用了一種被稱之為Project Object Model (POM)概念來管理項(xiàng)目,所有的項(xiàng)目配置信息都被定義在一個叫做POM.xml的文件中.. Maven是一款跨平臺的項(xiàng)目...
摘要:一什么是是一款軟件項(xiàng)目管理和理解工具?;陧?xiàng)目對象模型的概念,通過添加一小段描述來管理項(xiàng)目的構(gòu)建。另外如果子模塊中指定了版本號,那么會使用子模塊中指定的版本。 一、什么是Maven? Maven是一款軟件項(xiàng)目管理和理解工具?;陧?xiàng)目對象模型(POM)的概念,通過添加一小段描述來管理項(xiàng)目的構(gòu)建。 二、為什么要使用Maven? 以前在用Java開發(fā)一個項(xiàng)目時,往往需要引入幾十或者上百個Ja...
摘要:項(xiàng)目構(gòu)建基礎(chǔ)從屬于筆者的現(xiàn)代開發(fā)基礎(chǔ)系列文章,介紹了的歷史背景與多種構(gòu)建工具對比,以及的基本配置安裝與使用本文涉及的參考資料聲明在學(xué)習(xí)與實(shí)踐資料索引以及學(xué)習(xí)與資料索引。 Maven 項(xiàng)目構(gòu)建基礎(chǔ)從屬于筆者的現(xiàn)代 Java 開發(fā)基礎(chǔ)系列文章,介紹了 Maven 的歷史背景與多種構(gòu)建工具對比,以及 Maven 的基本配置安裝與使用;本文涉及的參考資料聲明在 Java 學(xué)習(xí)與實(shí)踐資料索引以及...
摘要:在之前,十個項(xiàng)目可能有十種構(gòu)建方式,但通過,所有項(xiàng)目的構(gòu)建命令都是簡單一致的。有利于促進(jìn)項(xiàng)目團(tuán)隊(duì)的標(biāo)準(zhǔn)化。手工勞動往往意味著低效,意味著容易出錯。這在很大程度上消除了重復(fù)。默認(rèn)情況下,該文件夾下放置了本地倉庫。學(xué)習(xí)實(shí)戰(zhàn)許曉斌著 Introduction Maven是一個異常強(qiáng)大的構(gòu)建工具,能夠幫我們自動化構(gòu)建過程,從清理、編譯、測試到生成報告,再到打包和部署。通過Maven,我們只需要...
閱讀 2631·2021-11-17 17:00
閱讀 1884·2021-10-11 10:57
閱讀 3751·2021-09-09 11:33
閱讀 921·2021-09-09 09:33
閱讀 3558·2019-08-30 14:20
閱讀 3325·2019-08-29 11:25
閱讀 2809·2019-08-26 13:48
閱讀 747·2019-08-26 11:52