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

maven倉庫分類apache

本地倉庫、遠程倉庫。遠程倉庫又有私服、中央倉庫、其它公共庫。中央倉庫是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遠程倉庫配置this

<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。maven二、maven3的佈局同樣,maven1和他們不同。url

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

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標籤不一樣以外,其他全部子元素和配置依賴倉庫徹底同樣。code

私服不是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同樣。

相關文章
相關標籤/搜索