maven-倉庫


1、maven倉庫

  • 在Maven的世界里,任何一個依賴、插件、項目構建的輸出,都可以成為一個構件。如  log4j-1.2.15.jar依賴是一個構件,maven-compile-pligin-2.0.2.jar插件是一個構件,myapp項目構建完后輸出myapp-1.0-SNAPSHOT.war也是一個構件。Maven在某個位置存儲所有maven項目共享的構件,這個位置就稱為倉庫。每一個構件在倉庫中都有一個唯一的坐標。
  • maven是基於簡單文件系統存儲的,根據依賴生成的路徑可以在maven倉庫的文件系統找到對應的文件--maven的布局
 <dependency>
      <groupId>org.testing</groupId>
      <artifactId>testng</artifactId>
      <version>5.6</version>
      <classifier>jdk15</classifier>   注:該項不會出現在依賴申明中,便於舉例寫於此處
      <packaging>jar</packaging>
 </dependency>

查找構件的步驟:

a、基於groupId准備路徑,將.轉換為/,並在最后添加路徑分隔符 -->org/testing

b、基於artifactId准備路徑,在前面基礎添加artifactId和路徑分隔符 -->org/testing/tesng/

c、使用版本信息,在前面基礎上添加version和路徑分隔符 -->org/testing/tesng/5.6/

d、依次加上artifactId,構建分隔符連字號,以及version -->org/testing/tesng/5.6/tesng-5.6

e、如果有classifier,則添加classifier和 路徑分隔符 -->org/testing/tesng/5.6/tesng-5.6-jdk15

f、添加擴展名 -->org/testing/tesng/5.6/tesng-5.6-jdk15.jar

2、倉庫的分類

  對Maven來說,倉庫分為本地倉庫和遠程倉庫。當Maven根據坐標尋找構件的時候,現在本地倉庫查找,找到直接使用,否則去遠程倉庫查找,找到了下載到本地倉庫再使用。如果在本地倉庫和遠程倉庫都沒有找到,maven會報錯。

  • 本地倉庫:setting.xml指定本地倉庫的路徑
  • 遠程倉庫-中央倉庫:maven的默認遠程倉庫

maven有默認的遠程倉庫的配置,詳見D:\apache-maven-3.5.0\lib\maven-model-builder-3.5.0\org\apache\maven\mode\pom-4.0.0.xml

 <repositories>
    <repository>
      <id>central</id>   中央倉庫的唯一標志
      <name>Central Repository</name>  可讀性名稱
      <url>https://repo.maven.apache.org/maven2</url>  中央倉庫的地址
      <layout>default</layout>  默認布局,1中所示
      <snapshots>  快照配置
        <enabled>false</enabled>  失能,表示不從中央倉庫下載快照版本的構件
      </snapshots>
    </repository>
 </repositories>
  • 遠程倉庫-私服:架設在局域網內的倉庫,代理廣域網上的遠程倉庫,供局域網內的maven用戶使用

私服優勢:

a、節省外網帶寬:減少了大量對遠程倉庫的重復請求

b、加速maven構建:maven內部機制(如快照更新檢查)要求maven執行構建的時候不停地檢查遠程倉庫數據,當配置了很多遠程倉庫時,構建速度會被大大降低。使用私服maven僅需要檢查局域網內私服的數據。

c、部署第三方構件:構件無法從任何遠程倉庫獲取,比如公司內部生成的私有構件,orcale的JDBC由於版權因素無法發布到公共倉庫,建立私服后可以將這些構件發布到私服供大家使用

...

 3、遠程倉庫的配置

 <repositories>
        <repository>
            <id>jboss</id>
            <name>JBoss Repository</name>
            <url>http://repository.jboss.com/maven2</url>
            <layout>default</layout>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>  更新策略,never-從不檢查更新lalways-每次構建都檢查更新;interval:X-每隔X分鍾檢查一次更新
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
 </repositories> 
  • 遠程倉庫的認證:

  大部分遠程倉庫不需要認證,部分出於安全考慮,需要認證

<server>
      <id>my-proj</id>
      <username>user</username>
      <password>passwd</password>
</server>

認證信息必須配置在setting.xml文件中;id元素的值必須與配置的倉庫的id一致

  • 部署到遠程倉庫:

  發布到遠程倉庫往往需要認證,配置通上。以下配置了穩定版本發布的倉庫和快照版本發布的倉庫:

 <distributionManagement>
        <repository>
            <id>proj-releases</id>
            <name>Tesla Releases</name>
            <url>http://192.168.1.1/content/repositories/proj-releases</url>
        </repository>
        <snapshotRepository>
            <id>proj-snapshots</id>
            <name>Tesla Snapshots</name>
            <url>http://192.168.1.1/content/repositories/proj-snapshots</url>
        </snapshotRepository>
</distributionManagement>

4、鏡像

  如果倉庫A可以提供倉庫B的所有內容,那么可以認為A是B的一個鏡像。比如:http://maven.net.cn/contents/groups/public是中央倉庫http://repol.maven.org/maven2在中國的鏡像,由於地理位置的因素,該鏡像往往能夠提供比中央倉庫更快的服務。因此,可以配置maven使用該鏡像來替代中央倉庫

<mirror>
      <id>maven.net.cn</id>
      <name>Team Nexus Release Mirror</name>
      <mirrorOf>central</mirrorOf>  表示該配置為central中央倉庫的鏡像,任何對中央倉庫的請求都會轉至該鏡像
      <url>http://maven.net.cn/contents/groups/public</url>
</mirror>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM