maven 遠程倉庫、私服及鏡像配置


maven倉庫分類

本地倉庫、遠程倉庫。遠程倉庫又有私服、中央倉庫、其它公共庫。中央倉庫是maven自帶的核心倉庫。

倉庫配置
遠程倉庫可以配置多個,超級pom中定義的中央倉庫

<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>

以下是jboss遠程倉庫配置

<repositories>
    <repository>
        <id>jboss</id>
        <name>JBoss Repository</name>
        <url>http://repository.jboss.com/maven2/</url>
        <releases>
            <enabled>true</enabled>
            <updatePolicy>daily</updatePolicy>
        </releases>
        <snapshots>
            <enabled>false</enabled>
            <checksumPolicy>warn</checksumPolicy>
        </snapshots>
        <layout>default</layout>
    </repository>
</repositories>

layout標簽:使用default倉庫布局,倉庫布局就是構件在倉庫中的存儲路徑,默認的構件倉庫路徑如com\juvenxu\mvnbook\hello-world\1.0-SNAPSHOT。maven2、maven3的布局一樣,maven1和他們不一樣。

<snapshots><enabled>false</enabled></snapshots>:不從該倉庫下載快照版本,即不穩定版本SNAPSHOT。
updatePolicy 從遠程倉庫檢查更新的頻率,默認值為daily,每天更新一次;never,從不檢查;always,每次構建都檢查;interval:X,每間隔X分鍾檢查一次更新。X為任意整數。
checksumPolicy 忽略

maven的setting.xml不支持直接配置repositories和pluginRepositories。所幸maven還提供了profile機制,能讓用戶將倉庫配置放到setting.xml 中的profile里,如下:

<profiles>
    <profile>
        <id>nexus</id>
        <repositories>
            <repository>
                <id>jboss</id>
                <name>JBoss Repository</name>
                <url>http://repository.jboss.com/maven2/</url>
                <releases>
                    <enabled>true</enabled>
                    <updatePolicy>daily</updatePolicy>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                    <checksumPolicy>warn</checksumPolicy>
                </snapshots>
                <layout>default</layout>
            </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>jboss</id>
            <name>JBoss Repository</name>
            <url>http://repository.jboss.com/maven2/</url>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>daily</updatePolicy>
            </releases>
            <snapshots>
                <enabled>false</enabled>
                <checksumPolicy>warn</checksumPolicy>
            </snapshots>
            <layout>default</layout>
        </pluginRepository>
    </pluginRepositories>
    </profile>
</profiles>
<activeProfiles>
    <activeProfile>nexus</activeProfile>
</activeProfiles>

當執行maven構建的時候,激活的profile會將倉庫配置應用到項目中去。

maven會區別對待依賴的遠程倉庫與插件遠程倉庫

插件的倉庫使用pluginRepositories來配置,除了pluginRepositories和pluginRepositorie標簽不同之外,其余所有子元素和配置依賴倉庫完全一樣。

私服不是maven的核心概念,它是一種衍生出來的特殊的maven倉庫。
maven官方區別依賴倉庫和插件倉庫,雖然id、url所有的元素值都相同;nexus的 maven-central 代理倉庫不區別依賴倉庫和插件倉庫,從這里即可以下載普通依賴,也可以下載maven插件。

配置鏡像
settings文件

<mirror> 
    <id>alimaven</id> 
    <name>aliyun maven</name> 
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url> 
    <mirrorOf>central</mirrorOf> 
</mirror> 

該mirrorOf的值為central,表示該配置為中央倉庫鏡像,任何對於中央倉庫的請求都會轉至此鏡像。

另外三個元素與一般倉庫配置無異,表示該鏡像倉庫的唯一標識符、名稱及地址。

鏡像一個更常見的用法是結合私服。由私服代理外部的公共倉庫,本地配置鏡像至私服如下。
<mirror>
  <id>maven-nexus</id>
  <name>this is my nexus</name>
  <url>http://localhost:8081/repository/maven-nexus/</url>
  <mirrorOf>*</mirrorOf>
</mirror>
<mirrorOf>*</mirrorOf> 表示該配置是所有Maven倉庫的鏡像,對於所有遠程倉庫的請求都會被轉移到http://
<mirrorOf>external:*</mirrorOf> 匹配所有遠程倉庫,除localhost、file://協議。
<mirrorOf>repo1,repo2</mirrorOf> 匹配倉庫1和倉庫2
<mirrorOf>*,!repo1</mirrorOf> 匹配所有遠程倉庫,repo1除外。
由於鏡像倉庫完全屏蔽了被鏡像倉庫,當鏡像倉庫不穩定或者停止服務的時候,maven將無法訪問被鏡像倉庫,無法下載構件。

部署構件至遠程倉庫
編輯pom文件

<distributionManagement>
    <repository>
        <id></id>
        <name></name>
        <url></url>
    </repository>
    <snapshotRepository>
        <id></id>
        <name></name>
        <url></url>
    </snapshotRepository>
</distributionManagement>

repository表示發布版本構件的倉庫,后者表示快照版本構件的倉庫。

配置后,在命令行運行mvn clear deploy,如果當前項目是快照版本,就部署到快照版本倉庫,反之部署到發布版本倉庫。

私服、遠程倉庫、鏡像如果需要認證,配置方法都一樣。基於倉庫或鏡像id配置即可。
認證信息必須配置在settings.xml文件中

<servers>
    <server>
        <id>releases</id>
        <username>admin</username>
        <password>admin123</password>
    </server>
    <server>
        <id>snapshots</id>
        <username>admin</username>
        <password>admin123</password>
    </server>
</servers>

這里的id必須和需要認證的倉庫或鏡像的id一樣。


免責聲明!

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



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