1. 程式人生 > >Maven(1)——(本地倉庫,遠端倉庫)

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/