maven手册(转)
1.1準備
(1)??eclipse中使用jdk1.5,不要使用jre,環境變量java_home也要使用1.5。
(2)??安裝maven。
解壓縮apache-maven-2.0.9.zip到%M2_HOME%,
比如:D:\software\\apache-maven-2.0.9,在環境變量中增加M2_HOME,在path中添加:“%M2_HOME%\bin” 。
(3)??在開發環境中安裝m2插件。
ü??Eclipse:?直接將共享的m2eclipse插件拷貝到eclipse安裝目錄對應的plugin和features目錄下。
ü??myEclipse: myEclipse6.5自帶了maven4myeclipse,但由于bug超多,在安裝之前需要先卸載,手工刪除MyEclipse安裝目錄下myeclipse/eclipse/features和myeclipse/eclipse/plugins這兩個目錄下與maven相關的文件,可以先在這2個目錄中搜索一下,帶有“maven” 的文件和文件夾全部刪除即可,然后再拷貝插件到plugin和features目錄下。
ü??如果需要自行下載m2插件安裝,步驟為:help->soft ware updates->find and install->search new features to install->new remote site,name名稱輸入“maven”,URL為:“http://m2eclipse.sonatype.org/update/”。????注意:如果查找到多個“maven_embedder 2.1.0.20080530-2300”,只能選擇其中一個,否則可能出現安裝的插件不可用的錯誤。
(4)??設置“M2_REPO?變量”
ü??window >> preferences >> Java >> Build Path >> Classpath Variables,新建一個?M2_REPO?的變量,變量值指向自己本地數據倉庫位置。例如D:/myRepository/repository。
(5)??將工程導入eclipse中,注意eclipse中的setting.xml與安裝maven后conf目錄下的setting.xml不同,maven有2種級別的setting.xml:
ü??%M2_HOME%/conf/settings.xml,這是針對該部電腦的所有用戶的profiles,是global profiles,它會影響所有的maven project build
ü??<your -home-directory>/.m2/settings.xml,這是針對每個用戶的profiles,是user級的profiles,它會影響當前用戶的所有maven project build。
ü??將共享的setting.xml拷貝到如圖所示的位置中:<your -home-directory>/.m2/settings.xml。修改settings.xml?中localRepository的值為自己的存儲位置。
?
(6)??向setting.xml配置所指定的repository目錄中拷貝maven插件。(目前這些插件沒有上傳到111.74機器,后續如果跟cmp使用同一個私服的話,使用時會自動下載。)
(7)??在工程所在的目錄中使用cmd,敲入?mvn compile,進行編譯,并下載工程依賴的jar包。(jar包較多,需要下載一段時間。)
??
如果需要經常使用cmd運行maven命令,建議在右鍵菜單中增加“cmd”,具體方法為:
ü??打開“我的電腦”,點擊菜單中的“工具”-“文件夾選項”,選擇“文件類型”,找到“(無)資料夾”,點“高級”,“新建”,在“操作”中填入 “CMD”(其實愛填什么都可以),“用于執行操作的應用程序”中填入“cmd.exe /k cd %1”,確定。
?
?
1.2配置setting.xml
1.2.1指定本地倉庫,localRepository如下設置:
<localRepository>D:/myRepository/repository</localRepository>
位置根據自己的存儲情況而定,這個位置要跟1.1的第四步設置的路徑相同。
1.2.2指定私服,下載jar包。
1.<offline>false</offline>
2.設置profile構建環境。
<profiles> …… <profile><id>artifactory</id> <repositories> <repository> <id>ext-releases-local</id> <url>http://10.164.111.74:8082/artifactory/repo</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>ext-snapshots-local</id> <url>http://10.164.111.74:8082/artifactory/repo</url> <releases> <enabled>false</enabled> </releases> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>plugins-releases-local</id> <url>http://10.164.111.74:8082/artifactory/repo</url> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> <pluginRepository> <id>plugins-snapshots-local</id> <url>http://10.164.111.74:8082/artifactory/repo</url> <releases> <enabled>false</enabled> </releases> </pluginRepository> </pluginRepositories> </profile> <profiles>
?3.最后激活該profile。
<activeProfiles><activeProfile>artifactory</activeProfile></activeProfiles>
?4.附profile配置說明:
< profiles >:我們可以在profile中定義一組我們需要使用的私服上倉庫 <profiles><profile><id> artifactory</id> <!--profile的ID--><repositories><repository><id> ext-snapshots-local</id><!--倉庫的id,對應與私服上的Local或Remote倉庫--><name>pmp remote snapshot repository</name> <!--該倉庫的描述--> <url>http://10.164.79.191:8081/artifactory/libs-snapshots</url> <!--該倉庫的地址--> <snapshots> <!-- snapshot項--><enabled>true</enabled> <!--true表示該倉庫處理snapshot類型的構件--><updatePolicy>always</updatePolicy> <!--這里可取值為:always(一直),daily(默認,每日),interval:X(這里X以分鐘為單位的時間間隔),或者never(從不)。--><!--Tips:對于snapshot,建議設置為always,它可以保證引用的snapshot版本的構件自動更新--></snapshots><releases> <!--release項目--><enabled>false</enabled> <!--false表示該倉庫不處理Release型的構件--></releases></repository></repositories></profile></profiles> ? 1.2.3 如果是代理上網,需設置代理。
如果需要自動下載internet上的jar包,按照如下進行設置。
注意,如果使用:mvn deploy命令部署工程,則需要注釋掉該段代碼,否則出現http504錯誤。
<proxies><proxy><id>optional</id><active>true</active><protocol>http</protocol><host>proxycn2.huawei.com</host><port>8080</port><nonProxyHosts>local.net,some.host.com</nonProxyHosts></proxy></proxies> ? 1.2.4 ? 設置私服的登陸信息。
?
如果不進行設置,會出現如下錯誤:
Error deploying artifact: Failed to transfer file: http://10.164.111.74:8082/artifactory/*.jar. Return code is: 401。
配置用戶密碼:
<servers><server><id>artifactory</id><username>admin</username><password>password</password></server></servers> ……<repository><id>internal-artifactory</id><url>http://10.164.111.74:8082/artifactory/repo</url> </repository> ?
1.3?Maven常用命令
maven定義的主要生命周期:
validate:?驗證項目是否正確以及相關信息是否可用。
compile:?編譯。
test:?通過junit進行單元測試。
package:?根據事先指定的格式(比如jar),進行打包。
integration-test:?部署到運行環境中,準備進行集成測試。
verify:?對包進行有效性性和質量檢查。
install:?安裝到本地代碼庫。
deploy:?在集成或發布環境,將包發布到遠程代碼庫。
常用命令:
ü??mvn? archetype:create -DgroupId=com.huawei.bme -DartifactId=test –Dversion=1.0
創建普通應用項目
ü??mvn archetype:create -DgroupId=com.huawei.bme -DartifactId=testWeb -DarchetypeArtifactId=maven-archetype-webapp
創建WEB項目
ü??mvn eclipse:eclipse
生成?Eclipse?項目文件及包引用定義,注意,需事先定義Classpath Variables: M2_REPO,指向本地maven類庫目錄。
ü??mvn compile
編譯主程序源代碼,不會編譯test目錄的源代碼。第一次運行時,會下載相關的依賴包,可能會比較費時。
ü??mvn test-compile
編譯測試代碼,compile之后會生成target文件夾,主程序編譯在classes下面,測試程序放在test-classes下。
ü??mvn test
運行應用程序中的單元測試
ü??mvn site
生成項目相關信息的網站,發布站點在target/site里。
ü??mvn clean
清除目標目錄(target)中的生成結果。
ü??mvn package
依據項目,打包類型為jar的,在目錄target中就會生成?jar?文件,打包類型為war的,生成?war?文件,打包之前會進行編譯,測試。
ü??mvn install
在本地?Repository?中安裝?jar。
ü??mvn deploy
在遠程?Repository?中發布。
ü??mvn install -DskipTests=true
忽略單元測試,在本地?Repository?中安裝?jar。
ü??mvn eclipse:clean
清除?Eclipse?項目文件及包引用定義
ü??mvn install:install -file -Dfile=D:/opensource/dbunit-2.2/dbunit-2.2.jar -DgroupId=dbunit-DartifactId=junitperf -Dversion=2.2 -Dpackaging=jar
發布到本地倉庫
ü??mvn deploy:deploy -file -DgroupId=staticComparison -DartifactId=static-comparison -Dversion=2.0 -Dpackaging=jar -Dfile=c:/staticComparison_2.0.jar
發布到遠程倉庫
ü??mvn help:describe -Dplugin=compiler -Dmojo=compile –Dfull
列出Compiler?插件的compile?目標的所有信息
ü??pom: mvn help:effective-pom
?查看實際使用的pom
ü??mvn dependency:analyze
分析項目依賴
1.4 FAQ
1.4.1創建maven?工程時報找不到“RELEASE”版本的插件錯誤
當使用mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app來創建一個新項目時,有時候會出現以下錯誤:
。。。。。。。?
[INFO] Velocimacro : initialization complete.?
[INFO] Velocity successfully started.?
[INFO] [archetype:create]?
[INFO] Defaulting package to group ID: com.mycompany.app?
[INFO]?
------------------------------------------------------------------------?
[ERROR] BUILD ERROR?
[INFO]?
------------------------------------------------------------------------?
[INFO] Failed to resolve artifact.?
GroupId: org.apache.maven.archetypes?
ArtifactId: maven-archetype-quickstart?
Version: RELEASE?
Reason: Unable to determine the release version?
Try downloading the file manually from the project website.?
Then, install it using the command:?
??? mvn install:install-file -DgroupId=org.apache.maven.archetypes?
-DartifactId=maven-arch?
etype-quickstart \?
??????? -Dversion=RELEASE -Dpackaging=jar -Dfile=/path/to/file
……
由于在maven本地倉庫中,可能更新了某個plug-in的版本,但本地plug-in?的metadata沒有版本的信息或者沒有最新版本的信息,致使maven無法下載正確的版本。具體步驟如下:
1.找到最新的插件版本,如果私服上沒有,則需要在網上下載,網址:http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/?
2.選擇最新版本并且下載最新的“maven-archetype-quickstart-1.0-alpha-4.jar ”文件?
3.安裝這個archetype到maven本地倉庫。使用命令如下:mvn install:install-file -DgroupId=org.apache.maven.archtypes -DartifactId=maven-archetype-quickstart -Dversion=1.0-alpha-4 -Dpackaging=jar -Dfile=c:\7000\maven\maven-archetype-quickstart-1.0-alpha-4.jar。注意-Dfile是剛下載的文件的路徑。
1.4.2?Deploy時出現: http502、?504錯誤
網關錯誤,?由作為代理或網關的服務器使用,表示不能及時地從遠程服務器獲得應答,?deploy時需要向私服上傳release或snapshot版本的歸檔包,所以出現該錯誤時要先檢查是否可以連接到私服。?如果setting.xml中設置了<proxies>????<proxy>……?</proxy></proxies>代理,要取消。
1.4.3?Deploy時出現: code 401錯誤
錯誤描述為:
Error deploying artifact: Failed to transfer file: http://10.164.111.74:8082/artifactory/*.jar. Return code is: 401。
參照1.2.4設置私服登陸信息。
1.4.4?mvn eclipse:eclipse?導入工程后出現:Unbound classpath variable: M2_REPO?錯誤
建立一個工程后,執行?mvn eclipse:eclipse,會產生eclipse的工程文件,但是第一次用eclipse打開工程后,發現報如下錯誤:Unbound classpath variable: 'M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar' in project my-webapp?,需要在Eclipse?中配置?M2_REPO?變量。
配置步驟:window >> preferences >> Java >> Build Path >> Classpath Variables,新建一個?M2_REPO?的變量,變量值指向你系統的Maven2的數據倉庫位置。例如前面提到了D:/myRepository/repository
總結
以上是生活随笔為你收集整理的maven手册(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分析与提取QQ木马盗号技术
- 下一篇: ERP软件与需求漫延,如何解决?