4、私有倉庫nexus(maven筆記)

1

前面我們講過本地倉庫和中央倉庫,有時候我們還會在本地倉庫和中央倉庫中間配置一個私有倉庫,這主要是用來管理一些常用的、公共的依賴包。同時也方便我們查詢。這里我們使用私有倉庫nexus。

一、安裝

  • (1)解壓縮之后將bin路徑添加到環境變量

  • (2)在命令行中使用命令nexus install進行安裝

  • (3)修改E:\nexus-2.11.4-01-bundle\nexus-2.11.4-01\bin\jsw\conf中配置文件的wrapper.java.command=E:\javaJDK\jdk1.8.0_60\bin\java.exe這一行,將地址改成本地jdk的路徑。

  • (4)使用命令nexus start啟動。注意:如果啟動失敗,可能是端口被占用,這里修改E:\nexus-2.11.4-01-bundle\nexus-2.11.4-01\conf\ nexus.properties中的端口號,默認是8081,我們修改為8082。

  • (5)使用網址http://localhost:8082/nexus進行訪問。點擊左邊的Repositories就可以看到工廠了。登錄帳號admin,密碼admin123。

二、倉庫簡介

在倉庫中我們可以看到有很多類型的倉庫

  • (1)virtual是一個針對maven1的一個轉接倉庫,現在對我們來說沒什么用處,此處不再講解。

  • (2)hosted倉庫都是內部項目的發布倉庫。在hosted倉庫中release表示內部項目的release模塊的發布倉庫,snapshots類似。3rd party表示第三方依賴的倉庫,這個數據通常是由內部人員自行下載之后發布上去的,也就是不能自動在中央倉庫中下載,比如Orecla依賴包。

  • (3)proxy類型倉庫就是代理倉庫,也就是要從遠程中央倉庫尋找數據的倉庫。Apache Snapshot表示的是Apache的快照版本的倉庫,Center表示中央倉庫,點擊下面的Configuration可以看到中央倉庫的地址,我們可以更改。Codehaus Snapshot表示另一個開源組織Codehaus的快照版本倉庫。

  • (4)group倉庫。組倉庫用來方便開發人員進行設置的倉庫。也就是一個私有倉庫。以后我們所有的下載都從此倉庫中進行下載。

三、配置

選中某個倉庫,在下面出現列表Configuration中我們下拉可以看到Ordered Group Repositories這一項,表示我們這個組中有列表中的倉庫,以后我們下載依賴包就只需要去找Public Repositories也就是group這個倉庫(之后我們會進行設置),它下面包含了很多中央倉庫(這樣我們在pom/xml文件中就不需要配置很多中央倉庫了),分別下載不同類型的依賴包,旁邊兩個沒有加進來的我們可以自己加入進來。

  • (1)配置:在我們的項目中我們不需要管什么中央倉庫,統統交給group這個倉庫給我們管理
<repository>
        <id>nexus</id>
        <name>Nexus Repo</name>
        <url>http://localhost:8082/nexus/content/groups/public/</url>
        <releases><enabled>true</enabled></releases>
        <snapshots><enabled>true</enabled></snapshots>
</repository>

在項目的parent模塊中(user-parent)中進行上面的配置,其中urlgroup倉庫的地址,最后兩項表示允許下載release版本和Snapshot版本的依賴包。默認的中央倉庫中Snapshot版本是不能下載的。

  • (2)鏡像配置
    maven安裝包的settings.xml中進行配置,注意:這個文件是我們自己本地倉庫的里面的那個設置文件,而不是maven/conf中的那個配置文件。
<mirror>
      <id>central</id>
      <!--號表示所有的工廠都加鏡像,如果不想為所有工廠做鏡像,請使用id,使用逗號分隔-->
      <!--<mirrorOf>central, nexus</mirrorOf>不建議-->
      <mirrorOf>*</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://localhost:8082/nexus/content/groups/public/</url>
    </mirror>

放在<mirrors>標簽中。

  • (3)測試一下
    我們可以找一個項目中沒有的依賴包添加進去,在user-parent中:
<dependency>
        <groupId>mockobjects</groupId>
        <artifactId>mockobjects-alt-jdk1.3</artifactId>
        <version>0.09</version>
</dependency>

user-core中:

<dependency>
        <groupId>mockobjects</groupId>
        <artifactId>mockobjects-alt-jdk1.3</artifactId>
</dependency>

之后我們刷新nexusBrowse Index可以看到:

2

可以看到其配置信息就出現在我們的服務器上了。以后我們就不一定每次都去外面的工廠中找了。私服是更具索引去找依賴的,但是有時候可能索引的版本太低,不符合要求,此時我們需要更新索引。

  • (4)更新索引
    • 一種方式是選中Central倉庫在Configuration中將Download Remote Indexes的值設置為true,此時就會自動幫我們更新,但是速度會很慢。
      3
    • 另一種方式是手動更新。方法是
      http://repo1.maven.org/maven2/.index/下載下面兩個文件
nexus-maven-repository-index.properties  
nexus-maven-repository-index.gz

同時在

http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.apache.maven.indexer%22%20AND%20a%3A%22indexer-cli%22

下載indexer-cli-5.1.1.jar。
將下載的三個文件放在同一個目錄(E:\nexus-2.11.4-01-bundle\index)下,然后通過DOS進入此目錄中,使用命令
java -jar indexer-cli-5.1.1.jar -u nexus-maven-repository-index.gz -d indexer
將壓縮文件解壓,之后在indexer目錄下會看到很多文件。此時我們先將nexus關閉,然后將這些文件拷貝到
E:\nexus-2.11.4-01-bundle\sonatype-work\nexus\indexer\central-ctx
目錄下(將原來的所有文件都刪除)。之后啟動nexus,可以在Browse Index中看到很多索引,我們之后可以自己更新這些索引,右鍵Central點擊Update Index即可。

然后我們可以在搜索框中搜索我們想要的索引,不需要去其他地方搜索了。比如我們搜索spring web會出來很多結果,然后選擇org.springframework中的一個:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-web</artifactId>
  <version>4.2.5.RELEASE</version>
</dependency>

加入到user-parentuser-core中,之后我們在Browse Storage中就可以找到:

4

注意:如果我們將本地group倉庫的配置去掉,還是會下載的,因為在maven的包中本身默認配置了一個中央倉庫了。但是這個倉庫默認將Snapshot關閉了,所以我們需要在項目中進行設置。
但是這樣每次都要在項目中進行配置,每個模塊都要配置比較麻煩,所以我們需要在本地倉庫中setttings.xml中進行配置:

<profile>
      <id>central-repos</id>
      <repositories>
        <repository>
          <id>central</id>
          <name>central</name>
          <url>http://central</url>
          <snapshots><enabled>true</enabled></snapshots>
          <releases><enabled>true</enabled></releases>
        </repository>
      </repositories>
</profile>

放在<profiles>標簽中。注意:配置了鏡像之后<url>就沒有意義了,隨便填一個(這項卻不能少),但是還需要在setttings.xml最后配置:

<activeProfiles>
    <activeProfile>central-repos</activeProfile>
</activeProfiles>

將配置激活。

四、項目發布

  • 在本地倉庫的setttings.xml中配置發布權限:
<!--配置用戶發布快照版本的權限-->
<server>
      <id>user-snapshots</id>
      <username>deployment</username>
      <password>deployment123</password>
    </server>
    <!--配置用戶發布release版本的權限-->
     <server>
      <id>user-releases</id>
      <username>deployment</username>
      <password>deployment123</password>
</server>

放在<servers>標簽中。這里其實就是給我們發布時的權限。

  • user-parent中配置
    <distributionManagement>
        <snapshotRepository>
            <id>user-snapshots</id>
            <name>User Project SNAPSHOTS</name>
            <url>http://localhost:8082/nexus/content/repositories/snapshots/</url>
        </snapshotRepository>

        <repository>
            <id>user-releases</id>
            <name>User Project Release</name>
            <url>http://localhost:8082/nexus/content/repositories/releases/</url>
        </repository>
    </distributionManagement>

注意:上面配置的其實就是我們的項目發布到哪個倉庫,這里配置的是releasessnapshots,當然在發布之前我們需要在這兩個倉庫的配置中配置允許發布。將Deployment policy設置為Allow Redeploy,然后保存即可。

5

6

注意:此配置中的id需要和maven倉庫settings.xml中的id對應,同時url就是nexus中快照倉庫和release倉庫的地址。然后使用命令clean deploy進行發布。因為我們發布的是快照版本,所以選中Snapshots中的Browse Storage刷新之后可以看到我們發布的項目。
7

五、創建項目工廠和設置權限

在以后的項目開發中我們不能將所有的模塊一下子全部發布到公共的哪個releaseSnapshots倉庫中,那樣不便于管理,而且有可能沖突,所以我們一般將一些公共的模塊發布到公共的releaseSnapshots倉庫中,而一些特殊的模塊發布到我們自己的倉庫中,所以我們需要創建自己的倉庫,這樣有利于管理。

  • (1)創建一個自己的release版本發布工廠和快照版本發布工廠
    點擊Add選擇Hosted Repository,選中之后在下面填寫相關信息:

    8

    其中第一項和第二項是我們自己填的,然后選擇允許發布(默認是不允許的)即可點擊save保存。注意:最后一項如果是release版本就選擇release,如果是Snapshot就選擇Snapshot。而快照版本的工廠建立類似。
    9

    這樣我們就建立好了兩個我們自己私有的倉庫
    10

  • (2)為上面兩個工廠打開權限
    點擊Security中的Privileges,然后點擊Add,在下面填寫相關信息:

    11

    注意:最好不要寫中文。名字我們可以任取,最后和項目工廠id一樣,工廠選擇我們release版本工廠的名字,最后一項按圖中選擇。點擊save保存。對于快照版本的類似:
    12

    注意:配置完之后在上面要出現我們配置的權限才算成功:
    13

  • (3)創建角色并且分配權限
    選擇Security中的Roles,點擊Add,然后進行添加:

    14

    Role IdName由我們自己填寫。注意:不要寫中文。然后點擊Add,之后我們需要選擇剛才添加的權限,這里我們只創建一個角色,所以將快照和release權限都選中(我們可以在輸入框中輸入My,然后點擊過濾Apply Filter),點擊ok,之后點擊save保存。

  • (4)創建用戶
    點擊Security中的Users,點擊Add

    15

    Status中需要選擇Active,然后點擊Add,選擇我們剛才創建的角色。保存即可。密碼是123456

  • (5)創建發布工廠
    當我們建立好自己的發布工廠之后我們就不要發布到以前那兩個倉庫中了,所以需要將user-parent中的配置地址改動

<distributionManagement>
        <snapshotRepository>
            <id>user-snapshots</id>
            <name>User Project SNAPSHOTS</name>
            <!-- <url>http://localhost:8082/nexus/content/repositories/snapshots/</url> -->
            <url>http://localhost:8082/nexus/content/repositories/MyUserReposSnapshots/</url>
        </snapshotRepository>

        <repository>
            <id>user-releases</id>
            <name>User Project Release</name>
            <!-- <url>http://localhost:8082/nexus/content/repositories/releases/</url> -->
            <url>http://localhost:8082/nexus/content/repositories/MyUserReposRelease/</url>
        </repository>
</distributionManagement>

這里改動之后我們在settings.xml中也需要改動:

    <!--配置用戶發布快照版本的權限-->
     <server>
      <id>user-snapshots</id>
      <!--<username>deployment</username>-->
       <username>kh</username>
      <!--<password>deployment123</password>-->
       <password>123456</password>
    </server>
    <!--配置用戶發布release版本的權限-->
     <server>
      <id>user-releases</id>
      <!--<username>deployment</username>-->
       <username>kh</username>
      <!--<password>deployment123</password>-->
       <password>123456</password>
    </server>

當然這里我們只是做一個試驗,名字和密碼我們可以自己進行配置。
配置完之后再次進行發布,我們可以看到

16

當然對于一些公共模塊,比如user-log模塊,我們需要配置

    <distributionManagement>
        <snapshotRepository>
            <id>user-snapshots</id>
            <name>User Project SNAPSHOTS</name>
            <url>http://localhost:8082/nexus/content/repositories/snapshots/</url> 
        </snapshotRepository>

        <repository>
            <id>user-releases</id>
            <name>User Project Release</name>
            <url>http://localhost:8082/nexus/content/repositories/releases/</url> 
        </repository>
    </distributionManagement>

我們這樣配置之后就會將user-parent中的配置覆蓋掉,這樣就發布到公共的倉庫中了。

補:如果公司不能訪問外網,則需要配置代理,配置之后一定記得將本地倉庫_remote.repositories、**.pom.lastUpdated文件全部刪除。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,908評論 18 139
  • |-1-更新內容[6.從倉庫解析依賴的機制(重要)] 1Maven倉庫作用 倉庫用來存儲所有項目使用到構件,在ma...
    zlcook閱讀 6,137評論 0 25
  • 首先私服是一種衍生出來的特殊的Maven遠程倉庫,構建私服的好處請看3.5私服 可以幫助大家建立私服的倉庫管理軟件...
    zlcook閱讀 10,633評論 0 32
  • 持續集成篇--Maven私有庫和本地庫的安裝與配置 如果構建的Maven 項目本地倉庫沒有對應的依賴包,那么就會去...
    ylcoder閱讀 740評論 1 4
  • 要說這也是當時那片兒長久以來都樸實如黃土的地界上最曲折糾纏也最有些轟動的一件。 說是張老二托人在老家給說了個媳婦,...
    斑錦閱讀 19,605評論 4 12