Maven 使用Nexus建立私服

倉庫管理軟件:
    私服不是Maven的核心概念,它僅僅是一種衍生出來的特殊的Maven倉庫
    有三種專門的Maven倉庫管理軟件能夠用來幫助你們創建私服:
    Apache基金會的Archiva、JFrog的Artifacotory和Sonatype的Nexus,Archiva是開源的,Artifacotory和Nexus的核心也是開源的 html

    Nexus分爲開源版和專業版,開源版本基本GPLv3許可證,其特性足以知足大部分Maven用戶的須要,特性以下:
    較小的內存佔用(最少僅爲28MB)
    基於ExtJS的友好界面
    基於Restlet的徹底REST API
    支持代理倉庫、宿主倉庫和倉庫組
    基於文件系統、不須要數據庫
    支持倉庫索引和搜索
    支持從界面上傳Maven構件
    細粒度的安全控制 java

    Nexus專業版本是須要付費購買的,對開源版本多以下特性:
    一些專業安全控制
    發佈流程控制等須要的特性 linux

安裝Nexus
    Nexus是典型的JavaWeb應用,它有兩種安裝包:包含jetty容器的Bundle包,不包含Web容器的war包
    解壓後直接運行便可 web

    解決壓包含以下兩個目錄:
    nexus-webapp-xxx:該目錄包含了Nexus運行所須要的文件,如啓動腳本、依賴jar包等
    sonatype-work:該目錄包含Nexus生成的配置文件、日誌文件、倉庫文件等 正則表達式

    其中,第一個目錄是運行Nexus所必需的,並且全部相同版本的Nexus實例所包含的該目錄內容都是同樣的。
    第二個目錄不是必須的,是在運行的時候動態建立的
    因此須要備份Nexus的時候,默認備份sonatype-work目錄就能夠。 spring

    在linux下面安裝
    WARNING - NOT RECOMMENDED TO RUN AS ROOT
    ****************************************
    If you insist running as root, then set the environment variable RUN_AS_USER=root before running this script 數據庫

    在172.168.27.70服務器上操做
    root用戶操做(建立maven用戶並賦權限)
    groupadd -g 1000 maven
    useradd -d /opt/maven/ -g 1000 maven
    chown -R maven:maven /opt/maven
    passwd maven
    su - maven
    上傳至/opt/maven目錄
    unzip nexus-2.3.0-04-bundle.zip
    ln -s nexus-2.3.0-04 nexus
    cd nexus/bin
    ./nexus start apache

    設置環境變量
    vi .bashrc
    增長以下內容:
    export NEXUS_HOME=/opt/maven/nexus-2.3.0-04
    export PATH=$PATH:$NEXUS_HOME/bin 瀏覽器

    便可在任何目錄運行nexus命令,如
    nexus start 緩存

    Usage: /opt/maven/nexus-2.3.0-04/bin/nexus { console | start | stop | restart | status | dump }

    用admin帳號登陸nexus(建議採用firefox登陸,展現效果較好,在其餘瀏覽器兼容器很差)
    admin/admin123
    deployment/deployment123

添加以下遠程倉庫: 

https://repository.apache.org/content/repositories/releases/
http://repository.apache.org/snapshots/
http://repo1.maven.org/maven2/
http://nexus.codehaus.org/snapshots/
http://download.java.net/maven/2/

http://repository.jboss.org/maven2/

https://repository.sonatype.org/content/groups/forge/

    alibaba 

http://code.alibabatech.com/mvn/releases

 cloudera 

https://repository.cloudera.com/artifactory/cloudera-repos

http://mvnrepo.code.taobao.org/nexus/content/repositories/releases/

http://172.168.27.70:8081/nexus/index.html#welcome

    配置時勾選:Download Remote Indexes,這樣nexus自動啓動定時任務Scheduled Tasks下載索引
    默認Central是沒有勾選Download Remote Indexes,能夠修改Central的配置,下載中央倉庫的索引
    並在倉庫組 Public Repositories中按如下順序增長以上4個遠程倉庫
    Sonatype Forge、Apache Releases、JBOSS Releases、JAVA NET

登陸Nexus
    Nexus的默認管理員用戶名和密碼爲admin/catt2013

Nexus的倉庫和倉庫組
    倉庫有4種類型
    group(倉庫組)、hosted(宿主)、proxy(代理)、virtual(虛擬)
    虛擬類型倉庫的做用其實是動態地將倉庫內容格式轉換,即也是爲了服務maven1格式

    Nexus內置的倉庫
    Maven Central: 代理Maven中央倉庫
    Releases: 一個策略爲Release的宿主類型倉庫,用來部署組織內部的發佈版本構件
    Snapshots: 一個策略爲Snapshot的宿主類型倉庫,用來部署組織內部的快照版本構件
    3rd party: 一個策略爲Release的宿主類型倉庫,用來部署沒法從公共倉庫得到的第三方發佈版本構件
    Apache Snapshots: 一個策略爲Snapshot的代理倉庫,用來代理Apache Maven倉庫的快照版本構件
    Codehaus Snapshots: 一個策略爲Snapshot的代理倉庫,用來代理Codehaus Maven倉庫的快照版本構件
    Google Code: 一個策略爲Release的代理倉庫,用來代理Google Code Maven倉庫的發佈版本構件
    java.net - Maven 2:一個策略爲Release的代理倉庫,用來代理java.net Maven倉庫的發佈版本構件
    Public Repositories:該倉庫組將上述全部策略爲Release的倉庫聚合並經過一致的地址提供服務
    Public Snapshot Repositories:該倉庫組將上述全部策略爲Snapshot的倉庫聚合並經過一致的地址提供服務

    倉庫分類的概念
    Maven能夠直接從宿主倉庫下載構件;也能夠從代理倉庫下載構件,
    而代理倉庫會間接地從遠程倉庫下載並緩存構件;最後,爲了方便,能夠從
    倉庫組下載構件,而倉庫組沒有實際內容(圖中用虛線表示),它會轉向其包含
    的宿主倉庫或代理倉庫得到實際構件的內容

Nexus的索引與構件搜索
    Nexus經過維護倉庫的索引來提供搜索功能,能在很大程度上方便Maven用戶定位構件座標

    爲了可以搜索Maven中央倉庫,首先須要設置Nexus中的Maven Central代理倉庫下載遠程索引,須要注意的是:
    這上配置的值默認是關閉的,此外,因爲中央倉庫的內容比較多,所以其索引文件比較大,Nexus下載該文件也須要比較
    長的時間。

    提供的搜索方式以下:
    關鍵字搜索:
    GAV搜索:容許用戶經過設置GroupId、ArtifactId、Version等信息來進行更有針對性的搜索
    類名搜索:容許用戶搜索包含某個JAVA類的構件
    校驗搜索:(checksum Search) 容許用戶使用構件的校驗(如經過spring-core-3.0.6.RELEASE.jar.sha1的內容)進行搜索

    有了中央倉庫的索引,用戶不只可以搜索構件,還可以直接瀏覽中央倉庫的內容。即Nexus的索引瀏覽功能。在Repositories頁面中,
    選擇Browse Index選項卡,就能看到中央倉庫內容的樹形結構。

    以上的索引及瀏覽功能都是基於Nexus索引而實現的,確切的應該稱之爲nexus-indexer
    Nexus可以遍歷一個Maven倉庫全部的內容,蒐集它們的座標、校驗和所含的JAVA類信息,而後以nexus-indexer的形式保存起來。
    中央倉庫維護了這樣的一個nexus-indexer,所以本地的Nexus下載到這個索引以後,就能在此基礎上提供搜索和瀏覽等服務。

    注意:不是任何一個公共倉庫都提供nexus-indexer,對於那些不提供索引的倉庫來講,沒法對其進行搜索。

配置Maven從Nexus下載構件
    在POM中爲Maven配置倉庫和插件倉庫,這樣的配置只對當前Maven項目有效,在實際應用中,須要在settings.xml中配置。
    這樣對全部本機Maven項目有效。可是settings。xml並不支持直接配置repositories和pluginRepositories,
    能夠經過Profile機制進行配置

    <profiles>
        <profile>
            <id>nexus</id>
            <repositories>
                <repository>
                    <id>nexus</id>
                    <name>nexus repository</name>
                    <url>http://localhost:8081/nexus/content/groups/public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>nexus</id>
                    <name>nexus repository</name>
                    <url>http://localhost:8081/nexus/content/groups/public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>
    <activeProfiles>
        <activeProfile>nexus</activeProfile>
    </activeProfiles>
    這樣的配置已經能讓本機全部的Maven項目從Nexus私服下載構件,但還會不時地訪問中央倉庫central
    若是但願全部Maven下載請求都經過Nexus,以全面發揮私服的做用,就須要配置鏡像。
    <mirrors>
        <mirror>
            <id>nexus</id>
            <mirrorOf>*</mirrorOf>
            <url>http://localhost:8081/nexus/content/groups/public/</url>
        </mirror>
      </mirrors>

部署構件至Nexus
    宿主倉庫的主要做用是存儲組織內部的,或者一些沒法從公共倉庫中得到的第三方構件,供項目項目使用。

    用戶能夠配置Maven自動部署構件至Nexus的宿主倉庫,也能夠經過界面手工上傳構件

    使用Maven部署構件至Nexus(在所在項目的pom.xml中配置)
    <distributionManagement>
        <repository>
            <id>nexus-releases</id>
            <name>Nexus Releases Repository</name>
            <url>http://localhost:8081/nexus/content/repositories/releases/</url>
        </repository>
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <name>Nexus Snapshots Repository</name>
            <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

    Nexus的倉庫對於匿名用戶是隻讀的,爲了可以部署構件,須要在settings.xml中配置認證信息
       <servers>
         <server>
        <id>nexus-releases</id>
        <username>admin</username>
        <password>admin123</password>
        </server>
        server>
        <id>nexus-snapshots</id>
        <username>admin</username>
        <password>admin123</password>
        </server>
      </servers>

    手工部署第三方構件至Nexus
    針對因爲許可證的因素沒法公共地放在公共倉庫中,還有大量的小型項目,沒有把本身的構件分發到中央倉庫,能夠手工下載到本地,
    而後經過Nexus的界面上傳到私服中。

    上傳第三方構件,上傳至3rd party宿主倉庫

Nexus的權限管理
    訪問控制模型
    Nexus是基於權限(privilege)作訪問控制的,服務器的每個資源都有相應的權限來控制。所以用戶執行特定的操做時就必須有必要的權限。

    Nexus預約義的三個用戶,這三個用戶對應了三個權限級別:
    admin/admin123:擁有對nexus服務的徹底控制
    deployment/deployment123:可以訪問nexus,瀏覽倉庫內容、搜索、而且上傳部署構件,但沒法對Nexus進行任何配置
    anonymous:對應了全部未登陸的匿名用戶,能夠瀏覽倉庫並進行搜索。

    爲項目分配獨立的倉庫
    爲每一個項目分配獨立的倉庫,而且只將倉庫的部署、修改、和刪除權限賦予該項目成員,其餘用戶只能讀取、下載和搜索該倉庫的內容。

    有了倉庫以後,就須要建立基於倉庫的增、刪、改、查權限,在Nexus中,這樣的權限是基於Repository Target創建的,
    Repository Target其實是一系列表達式,在訪問倉庫某路徑下面的內容的時候,Nexus會將倉庫路徑與Repository Target的
    正則表達式一一匹配,以檢查權限是否正確。

    先創建Repository Target,而後根據Repository Target創建對應的privileges, 創建包含如上權限的角色,
    根據須要將其分配給項目的團隊成員。

Nexus的調度任務     Nexus提供了一系列可配置的調度任務來方便用戶管理系統。

相關文章
相關標籤/搜索