Centos6.5 下 Maven 安裝
一、Maven簡介
Maven 是基於專案物件模型(POM),可以通過一小段描述資訊來管理專案的構建,報告和文件的軟體專案管理工具
Maven 除了以程式構建能力為特色之外,還提供高階專案管理工具。由於 Maven 的預設構建規則有較高的可重用性,所以常常用兩三行 Maven 構建指令碼就可以構建簡單的專案。由於 Maven 的面向專案的方法,許多 Apache Jakarta 專案發文時使用 Maven,而且公司專案採用 Maven 的比例在持續增長
Maven這個單詞來自於意第緒語,意為知識的積累,最早在Jakata Turbine專案中它開始被用來試圖簡化構建過程。當時有很多專案,它們的Ant build檔案僅有細微的差別,而JAR檔案都由CVS來維護。於是Maven創始者開始了Maven這個專案,該專案的清晰定義包括,一種很方便的釋出專案資訊的方式,以及一種在多個專案中共享JAR的方式。
二、常見 Bug
用maven做專案,最鬱悶的莫過於某些依賴庫下載不了。被牆了,你懂的。使用maven映象倉庫及其重要,特別是國內的映象,可以有效緩解被牆疼痛。
同時,會經常會遇到以下問題:
[ERROR] Failed to execute goal on project …: Could not resolve dependencies for project …: The following artifacts could not be resolved: com.smart:smart-framework:jar:1.0, …: Failure to find com.smart:smart-framework:jar:1.0 in
http://maven.oschina.net/content/groups/public/ was cached in the local repository, resolution will not be reattempted until the update interval of osc has elapsed or updates are forced -> [Help 1]
目前 OSC Maven 已經將所有第三方 jar 包放到了獨立的倉庫中,該倉庫的地址如下:
為了防止與中央倉庫同步時導致衝突,目前 thirdparty 倉庫與 public 倉庫沒有任何交集了,也就是說它們是完全獨立的,public 不再包括 thirdparty。
三、安裝步驟
解壓 Maven到 /home/hadoop/software 目錄下
cd /home/hadoop/software
tar -zxvf apache-maven-3.2.1-bin.tar.gz
- 修改配置 Maven
export M2=/home/hadoop/software/apache-maven-3.2.1
export PATH=${PATH}:$M2/bin
- 檢驗 Maven 是否安裝成功
mvn -version
顯示如下即安裝成功:
注意事項:
1. 注意Maven版本檔案
Hadoop 2.2.0的原始碼與Maven 3.x存在相容性問題,所以會出現java.lang.NoClassDefFoundError: org/sonatype/aether/graph/DependencyFilter
2. MAVEN國內映象配置
由於maven國外伺服器可能連不上,先給maven配置一下國內映象,在maven目錄下,conf/settings.xml,在裡新增,原本的不要動,(本人在原有的基礎上直接修改,也成功)
<mirror>
<id>nexus-osc</id>
<mirrorOf>*</mirrorOf>
<name>Nexusosc</name>
<url>http://maven.oschina.net/content/groups/public/</url>
</mirror>
<mirror>
<id>osc_thirdparty</id>
<mirrorOf>thirdparty</mirrorOf>
<url>http://maven.oschina.net/content/repositories/thirdparty/</url>
</mirror>
同樣,在內新新增:
<profile>
<id>jdk-1.4</id>
<activation>
<jdk>1.4</jdk>
</activation>
<repositories>
<repository>
<id>nexus</id>
<name>local private nexus</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>local private nexus</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
以上程式碼,本人均直接複製替換原有的程式碼,可以將原有程式碼備份!
3.複製配置
- 將該配置檔案複製到使用者目錄,使得每次對maven建立時,都採用該配置
- 檢視使用者目錄【/home/hadoop】是否存在【.m2】資料夾,如沒有,則建立
cd /home/hadoop/
mkdir .m2
- 複製檔案
cp /home/hadoop/software/apache-maven-3.2.1/conf/settings.xml ~/.m2/
四、Maven新增其他映象地址
如果上述的映象無法滿足您的需求,那麼以下這些映象地址,可以考慮以下,至少筆者使用上面的映象已經足夠了
1. 國外映象:biblio.org
<mirror>
<id>ibiblio</id>
<mirrorOf>central</mirrorOf>
<name>ibiblio Mirror of http://repo1.maven.org/maven2/</name>
<url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>
</mirror>
2. 國外映象:jboss
<mirror>
<id>jboss-public-repository-group</id>
<mirrorOf>central</mirrorOf>
<name>JBoss Public Repository Group</name>
<url>http://repository.jboss.org/nexus/content/groups/public</url>
</mirror>
3.國外映象:repo2
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
4.國外映象: uk.maven.org
<mirror>
<id>uk</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://uk.maven.org/maven2/</url>
</mirror>
5. 國內映象:oschina.net
<mirror>
<id>nexus-osc</id>
<mirrorOf>*</mirrorOf>
<name>Nexus osc</name>
<url>http://maven.oschina.net/content/groups/public/</url>
</mirror>
6. net.cn
<mirror>
<id>net-cn</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://maven.net.cn/content/groups/public/</url>
</mirror>
<mirror>
<id>UK</id>
<name>UK Central</name>
<url>http://uk.maven.org/maven2</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>sonatype</id>
<name>sonatype Central</name>
<url>http://repository.sonatype.org/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>