Maven(1)——(本地倉庫,遠端倉庫)
Maven
在開發Java專案的過程中,經常會引入大量的Jar檔案,在專案目錄下,往往會看到一個名為/lib的子目錄,那裡存放著各類第三方依賴jar檔案,如 log4j.jar,junit.jar等等。每建立一個專案,開發人員都必須走這一步。多個專案不共用相同的jar檔案,不僅會造成磁碟資源的浪費,也使得版本的一致性管理變得困難。此外,如果使用版本管理工具,如 SVN(沒有使用版本管理工具?馬上試試SVN吧,它能幫你解決很多頭疼的問題),需要將大量的jar檔案提交到程式碼庫裡,可是版本管理工具在處理二 進位制檔案方面並不出色。Maven倉庫就是放置所有JAR檔案(WAR,ZIP,POM等等)的地方,所有Maven專案可以從同一個Maven倉庫中獲取自己所需要的依賴 JAR,這節省了磁碟資源。此外,由於Maven倉庫中所有的JAR都有其自己的座標,該座標告訴Maven它的組ID,構件ID,版本,打包方式等等, 因此Maven專案可以方便的進行依賴版本管理。也不在需要提交JAR檔案到SCM倉庫中,可以建立一個組織層次的Maven倉庫(接下來的文章會一一介紹),供所有成員使用。Maven倉庫能幫助我們管理構件(主要是JAR)。
Maven本地倉庫和遠端倉庫
執行Maven的時候,Maven所需要的任何構件都是直接從本地倉庫獲取的。如果本地倉庫沒有,它會首先嚐試從遠端倉庫下載構件至本地倉庫,然後再使用本地倉庫的構件。
Maven預設的本地倉庫地址為${user.home}/.m2/repository 。也就是說,一個使用者會對應的擁有一個本地倉庫。也可以通過設定指定到自己的倉庫中
1)、修改${user.home}/.m2/settings.xml :
<settings> ... <localRepository>D:\java\repository</localRepository> ... </settings>
2)、修改${maven_home}/../conf/setings.xml:
<settings>
...
<localRepository>D:\java\repository</localRepository>
...
</settings>
Maven 遠端倉庫可以是Maven的中心倉庫和自己設定的nexus服務(接下來的文章會一一介紹),Maven的遠端倉庫可以通過設定指定到理想的遠端倉庫中
1)、預設遠端倉庫的配置檔案 ${M2_HOME}/lib/maven-2.0.10-uber.jar,開啟該檔案,找到超級POM:\org\apache\maven\project\pom-4.0.0.xml ,它是所有Maven POM的父POM,所有Maven專案繼承該配置,你可以在這個POM中發現如下配置:
<project>
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
</pluginRepository>
</pluginRepositories>
</project>
url即為Maven指定的遠端倉庫。
2)、通過配置超級POM.XML檔案,修改Maven的遠端倉庫:
<project>
...
<repositories>
<repository>
<id>maven-public</id>
<name>aline</name>
<url>http://localhost:8082/repository/maven-public/</url>
<releases>
<enabled> true</enabled>
</releases>
<snapshots>
<enabled> false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>maven-public</id>
<name>aline</name>
<url>http://localhost:8082/repository/maven-public/</url>
<releases>
<enabled> true</enabled>
</releases>
<snapshots>
<enabled> false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
...
</project>
其中引數releases =true 表示可以從該倉庫下載releases版本的構件,releases=false則相反
3)、通過配置${maven_home}/../conf/setings.xml 檔案可以修改遠端倉庫:
</settings>
...
<activeProfiles>
<activeProfile>myProfiel </activeProfile>
</activeProfiles>
<profiles>
...
<profile>
<id>myProfiel</id>
<repositories>
<repository>
<id>maven-public</id>
<name>aline</name>
<url>http://localhost:8082/repository/maven-public/</url>
<releases>
<enabled> true</enabled>
</releases>
<snapshots>
<enabled> false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>maven-public</id>
<name>aline</name>
<url>http://localhost:8082/repository/maven-public/</url>
<releases>
<enabled> true</enabled>
</releases>
<snapshots>
<enabled> false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
...
</profiles>
...
</settings>
可以通過配置setting.xml,但是該配置檔案並不支援<repositories>及<pluginRepositories>。通過<activeProfile>元素來啟用這個profile,這樣我們就可以全域性的使用這個配置,不再需要為每個POM做重複的配置了。
比較常用的倉庫:
http://repo1.maven.org/maven2/
http://repository.jboss.com/maven2/
http://repository.sonatype.org/content/groups/public/
http://mirrors.ibiblio.org/pub/mirrors/maven2/org/acegisecurity/
http://maven.glassfish.org/content/groups/glassfish/
https://nexus.sourcesense.com/nexus/content/repositories/public/
http://repository.codehaus.org/
http://snapshots.repository.codehaus.org/
http://people.apache.org/repo/m2-snapshot-repository
http://people.apache.org/repo/m2-incubating-repository/