maven---9使用Nexus創建私服

  • 首先私服是一種衍生出來的特殊的Maven遠程倉庫,構建私服的好處請看3.5私服
  • 可以幫助大家建立私服的倉庫管理軟件:Apache基金會的Archiva,JFrog的Artifactory,Sonatype的Nexus,其中Nexus最流行。

1Nexus簡介

  • Nexus的誕生也是因為受不了外網的慢速度,所以通過開發web應用把已下載構件緩存起來,下次下載直接從緩存處獲取。
  • Nexus分為專業版(收費)和開源版(免費)
    開源版特性:
  • 較小的內存占用(最少28MB)
  • 基于ExtJS的友好界面
  • 基于Restlet的完全REST API
  • 支持代理倉庫、宿主倉庫和倉庫組
  • 基于文件系統,不需要數據庫
  • 支持倉庫索引和搜索
  • 支持從界面上傳Maven構件
  • 細粒度的安全控制

專業版

2安裝Nexus

Nexus是典型的Java Web應用,他有兩種安裝包,一種是包含Jetty容器的Bundle包,另一種是不包含Web容器的war包。

2.1下載

下載,下載oss版
版本:nexus-3.1.0-04-win64.zip
jdk要求:1.8及以上。

nexus3.1參考文檔

解壓后有兩個目錄(安裝目錄、數據目錄)


nexus-3.1.0-04-win64下文件
  • (安裝目錄)nexus-3.1.0-04:該目錄包含了Nexus運行所需要的文件,如啟動腳本,依賴jar包等。(所有相同版本nexus中該目錄內容相同)
    目錄內容及解釋:
LICENSE.txt
NOTICE.txt
bin
deploy
etc
lib
public
system
The installation directory includes a number of nested directories:

LICENSE.txt and NOTICE.txt

contain legal details about the license and copyright notices.
bin

contains the nexus
 startup script itself as well as startup-related configuration files.

etc

contains configuration files.
lib

contains binary libraries related to Apache Karaf.
public

contains public resources of the application.
system

contains all components and plugins that constitute the application.
  • (數據目錄)sonatype-work:該目錄包含Nexus生成的配置文件、日志、倉庫文件等。(需要備份時備份該目錄就行)

2.2常見命令

如使用命令行請使用管理員權限打開

2.2.1配置成服務

  • 原因:
    在生產中使用安裝Nexus Repository Manager時,必須將其配置為作為服務運行,以便在服務器重新啟動后重新啟動。 官方文檔提供了各平臺的配置。
  • Running as a Service on Windows
    使用管理員身份打開命令行
nexus.exe /install <optional-service-name>

默認服務名稱為nexus。
安裝成功


Paste_Image.png

在系統的服務中可以看到:

nexus安裝成系統服務

配置成隨系統啟動

配置隨系統啟動

操作服務的其命令

nexus.exe /start <optional-service-name>   開啟服務,(也可以在winds的服務界面操作)
nexus.exe /stop <optional-service-name>
nexus.exe /uninstall <optional-service-name> 卸載服務。

2.2.2啟動nexus

啟動成功,默認端口8081.登錄界面,http://localhost:8081/

啟動成功登錄后界面

方案一
如果你將nexus配置成服務后,1.進入界面系統服務界面,直接啟動服務后就可以,或者在命令行采用nexus.exe /start nexus,啟動服務。

方案二(推薦方案一)
如果你沒有將nexus配置成服務,則需要手動到命令行執行啟動命令:
進入到bin/目錄下

nexus.exe /run

出現下面文字就啟動成功

Started Sonatype Nexus OSS 3.1.0-04

其它命令

nexus.exe start
nexus.exe stop
nexus.exe restart

2.2.3停止nexus

同樣如果是配置成系統中的服務,則關閉服務就行,否則直接在命令行執行Ctr+C

2.2.4登錄

進入nexus后,輸入賬號密碼登錄,admin/admin123

nexus的界面

2.2.5提示

為了在命令行中方便使用nexus.exe命令可以將其配置在系統環境變量中。

3Nexus的倉庫與倉庫組

Nexus包含了各種類型的倉庫概念,包括代理倉庫(proxy)、宿主倉庫(hosted)、倉庫組(group)、虛擬倉庫(virtual)。每一種倉庫都提供了豐富實用的配置參數,用戶根據需求定制。

3.1Nexus內置的倉庫

  • 對于4種類型的倉庫,Maven內置了一些倉庫,這些倉庫用戶可以不用在配置了。每個倉庫的格式為maven2或maven1,此外倉庫還有一個屬性Policy(策略),表示倉庫為發布(Release)版本還是快照(Snapshot)版本倉庫。

    • 代理倉庫主要是提供下載緩存構件和插件、如果只是從遠程倉庫下載構件和插件、那么代理倉庫完全足夠。
    • 宿主倉庫主要用于存放項目部署的構件或者第三方構件。
    • 倉庫組將相同策略的倉庫聚合,并通過一致的地址提供服務。(因為項目有可能依賴的中央倉庫的release插件和某個宿主倉庫中release的插件,為了方便可以配置倉庫組作為倉庫,而不去單獨配置兩個倉庫)。
  • 對于格式為maven1的倉庫和虛擬類型的倉庫不做介紹,這兩種都是為maven1服務的。

  • Maven Central: 代理中央倉庫、策略為Release、只會下載和緩存中央倉庫中的發布版本構件。

  • Release: 策略為Release的宿主倉庫、用來部署組織內部的發布版本內容。

  • Snapshot: 策略為Snapshot的宿主倉庫、用來部署組織內部的快照版本內容。

  • 3rd party: 策略為Release的宿主倉庫類型、用來部署無法從公共倉庫獲取的第三方發布版本構件、如oracle連接驅動jar包。

  • ApacheSnapshot: 策略為Snapshot的代理倉庫、用來代理ApacheMaven倉庫的快照版本構件。

  • Codehaus Snapshots:這是一個策略為Snapshot的代理倉庫,用來代理Codehaus Maven倉庫的快照版本構件。

  • Google Code:這是一個策略為Release的代理倉庫,用來代理Google Code Maven倉庫的發布版本構件。

  • PublicRepositories:該倉庫將上述所有策略為Release的倉庫聚合并通過一致的地址提供服務。

  • Public Snapshot Repositories:該倉庫將上述所有策略為Snapshot的倉庫聚合并通過一致的地址提供服務。

3.2案例理解概念

公司內部建立Nexus私服為公司項目提供服務,公司Maven項目X。

  • X依賴開源類庫如JUnit類,這些構件可以從Maven中央倉庫獲得,因此Maven Central代理倉庫會被用來代理中央倉庫的內容,并在私服上緩存下來。

  • X還來依賴與Google Code的某個項目,其構件不在中央倉庫,只存在于Google Code倉庫中,所以Google Code代理倉庫會被用來緩存這樣的構件。

  • X還依賴于Oracle的JDBC驅動,由于版權原因,該類庫無法從公共倉庫獲得,因此公司管理員將其部署到3rd party宿主倉庫中,供X使用。

  • X的快照版構件成功后會被部署到Snapshots宿主倉庫中,供其他項目使用,當X發布正式版本的時候,其構件會被部署到Release宿主倉庫中。

  • 由于X用到了上述列表中的很多倉庫,為每個倉庫聲明Maven配置又比較麻煩,因此可以直接使用倉庫Public Repositories和Public Snapshot Repositories。當X需要JUnit的時候,她直接從PublicRepositories下載,Public Repositories會選擇Maven Central提供實際的內容。

3.3Nexus倉庫分類的概念

Maven可以直接從宿主倉庫下載構件,也可以從代理下載,為了方便還可以從倉庫組下載構件,倉庫組沒有時間內容,它會轉向其包含的宿主倉庫或者代理倉庫獲取實際的構件。

各種類型的Nexus倉庫

3.4創建Nexus倉庫

創建按鈕
選擇倉庫格式和類型

3.4.1宿主倉庫配置信息

宿主倉庫配置信息

3.4.2代理倉庫配置信息

代理倉庫配置信息

案例

  • 發生錯誤條件:第一次搭建nexus私服在局域網內的一臺服務器上,而且那臺服務器沒有連接外網,所以私服上還沒有任何構件。局域網中的A電腦進行了下面操作,A在本地maven倉庫之前已經有了maven-reporting-api構件,通過鏡像配置本地maven項目從私服獲取所有構件,然后執行mvn clean deploy出現以下錯誤。下面是一種錯誤分析。
緩存失敗信息后,再次連接又出錯
  • 錯誤分析:(正確,測試過)
    a. 根據提示說明本地緩存了這個錯誤,解決方法由兩個:

  • 一是等maven檢查遠程倉庫的更新間隔時間到了(更新間隔時間是maven從遠程倉庫(nexus)檢查最新構件的更新策略updataPolicy。默認一天檢查一次。詳細請看maven---6倉庫--->4遠程倉庫配置)。

  • 另一個是強制讓maven檢查遠程倉庫進行更新,即不再等它時間到,使用參數U來強制更新。

  • 解決步驟:(如果解決不了看下面)

    • 1.讓私服連接上外網,在本地倉庫中刪除掉maven-reporting-api構件。
    • 2.執行mvn clean deploy -U
  • 再解決
    如果上面的1,2執行完后沒解決。那么應該是nexus上遠程代理倉庫在沒有網的情況下下載構件,但是下載失敗了,而nexus代理倉庫對“沒找到構件”這種情況會緩存一天(看3.4.2代理倉庫配置信息),所以即使你本地按照上面設置了,但是nexus這里依然給你它緩存的結果。進行下面的設置后在執行上面2個步驟,即可解決。

    • 1.到nexus上設置要訪問的遠程代理倉庫對待“沒有發現構件的緩存時間設為0”。
設置緩存錯誤結果時間為0
  • 再次執行mvn clean deploy -U,就可以了。

3.4.3倉庫組配置信息

倉庫組配置信息

4配置Maven從Nexus下載構件

4.1確定nexus上倉庫的地址。

獲取要配置nexus倉庫的地址

http://localhost:8081/repository/maven-public/

4.2在單個maven項目中配置

4.3配置全局范圍(推薦)

  • 想通過一次配置就讓本機所有maven項目都使用自己的私服。答案:在setting.xml中配置。

4.3.1在setting中配置訪問私服(方法一)

  • settings.xml中不能配置repositories和pluginRepositories,但是提供了Profile機制,能讓用戶將倉庫配置放到settings.xml中的Profile中。
<settings>
 ...
    <!--配置Nexus倉庫-->
    <profile>
       <id>nexus</id>
       <repositories>
        <repository>
          <id>nexus</id>
          <name>Nexus Repository</name>
          <url>http://localhost:8081/repository/maven-public/</url>
          <layout>default</layout>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
         <releases>
            <enabled>true</enabled>
          </releases>
        </repository>
      </repositories>

      <pluginRepositories>
        <pluginRepository>
            <id>nexus</id>
            <name>Nexus Repository</name>
            <url>http://localhost:8081/repository/maven-public/</url>
            <layout>default</layout>
            <snapshots>
              <enabled>true</enabled>
            </snapshots>
            <releases>
              <enabled>true</enabled>
            </releases>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>
  <!--激活Nexus倉庫配置  -->
  <activeProfiles>
    <activeProfile>nexus</activeProfile>
  </activeProfiles>
...
</settings>
  • 配置中使用一個id=nexus的profile,這個profile包含了相關的倉庫配置,同時使用activeProfile元素將這個profile激活。

4.3.2通過鏡像配置私服(方法二)(推薦)

  • 通過(方法一)在settings.xml配置私服倉庫后,項目依然會時不時訪問中央倉庫和maven項目中配置的其它遠程倉庫,而不是全部訪問私服,此時就需要配置鏡像。maven---6倉庫--->7鏡像
  • 讓所有對遠程倉庫(不論是中央倉庫還是第三方倉庫如:JBoss Maven庫)的請求都轉到nexus倉庫,同時nexus的倉庫組要包含所有maven項目需要請求的代理倉庫(即需要的代理所有需要的遠程倉庫)。
    同樣在settings.xml中配置鏡像:
<settings>
 ...

    <!--配置鏡像-->
 <mirror>
      <id>nexus</id>
      <mirrorOf>*</mirrorOf>
      <name>nexus mirror for all repositry</name>
      <url>http://localhost:8081/repository/maven-public/</url>
    </mirror>
    <!--配置Nexus倉庫-->
    <profile>
       <id>nexus</id>
       <repositories>
        <repository>
          <id>central</id>
          <name>Central Repository</name>
          <url>https://repo.maven.apache.org/maven2</url>
          <layout>default</layout>
          <snapshots><enabled>true</enabled>  </snapshots>
         <releases><enabled>true</enabled>  </releases>
        </repository>
      </repositories>

      <pluginRepositories>
        <pluginRepository>
            <id>central</id>
            <name>Central pluginRepository</name>
            <url>https://repo.maven.apache.org/maven2</url>
            <layout>default</layout>
            <snapshots><enabled>true</enabled></snapshots>
            <releases><enabled>true</enabled></releases>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>
  <!--激活Nexus倉庫配置  -->
  <activeProfiles>
    <activeProfile>nexus</activeProfile>
  </activeProfiles>
...
</settings>

解釋

  • 問:配置的鏡像*會攔截所有的倉庫請求,為什么還要配置central的倉庫及插件倉庫呢?
  • 答:1.首先倉庫名稱取為central,會覆蓋超級Pom中的中央倉庫配置。2.由于所有倉庫請求都轉向了鏡像配置的地址,所以配置的倉庫和插件倉庫的url無效。3.主要目的:開啟對快照版本下載的支持,當Maven需要下載發布版或者快照版構件的時候,它首先檢查central,看該類型構件是否支持,得到正面回答后,再根據鏡像匹配規則轉而訪問私服倉庫地址。(此時私服倉庫有可能支持快照也有可能不支持,主要看私服倉庫配置)。

5部署構件至Nexus

5.1需求說明

  • 對于Nexus的宿主倉庫,他們的主要作用是存儲組織內部的,或者一些無法從公共倉庫獲得的第三方構件,供大家下載,所以需要1.配置maven自動不熟構件到nexus的宿主倉庫中。2.或者通過界面手動上傳構件。

5.2部署Maven項目構件至Nexus

開發生成的快照版本部署到Nexus中策略為Snapshot的宿主倉庫中,項目正式發布的構件則應該部署到Nexus中策略為Release的宿主倉庫中。

5.2.1獲取Nexus中確定要部署的宿主倉庫的連接

要部署到的遠程倉庫

http://localhost:8081/repository/maven-releases/
http://localhost:8081/repository/maven-snapshots/

5.2.2配置項目pom

 <!--配置項目生成的構件部署到Nexus私服上 -->
  <distributionManagement>
    <repository>
        <id>nexus-releases</id>
        <name>Nexus ReleaseRepository</name>    
        <url>http://localhost:8081/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>nexus-snapshots</id>
        <name>Nexus SnapshotsRepository</name>      
        <url>http://localhost:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
  </distributionManagement>

5.2.3在settings.xml配置倉庫認證信息

因為不是所有人都可以部署構件到nexus倉庫中的,關于認證信息就是擁有管理該倉庫的用戶,在下面有講。

<settings>
 ....
  <servers>
 <!--配置nexus倉庫認證信息-->
    <server>  
        <id>nexus-releases</id>  
        <username>admin</username>  
        <password>****</password>  
    </server>  
    <server>  
        <id>nexus-snapshots</id>  
        <username>admin</username>  
        <password>****</password>  
    </server>  
  </servers>
...
</settings>

5.2.4使用mvn命令

在項目根目錄下執行部署命令,或者在開發工具中執行部署命令

mvn clean deploy

5.3手動部署第三方構件至Nexus倉庫

  • 對于一些開源或者有版權的jar文件,他們在遠程倉庫沒有,所以只能將他們先下載下來,再手動上傳到nexus私服上。

5.3.1確定Nexus中要部署的3rd-party宿主倉庫連接

該宿主倉庫一般轉為用來存放第三方構件的倉庫。


Paste_Image.png

http://localhost:8081/repository/3rd-party/

5.3.2在settings.xml配置3rd-party倉庫認證信息

該信息在下面使用

<server>  
        <id>nexus-3rd-party</id>  
        <username>admin</username>  
        <password>admin123</password>  
    </server>  

5.3.3命令行部署到nexus上

通過命令行來操作部署G:\5jar\edu.mit.jwi_2.3.3_jdk.jar目錄下的jar包到nexus的3rd-party倉庫中。
其中需要你自定義groupId,artifactId,version,packaging信息。其中的-Dfile填寫jar的位置,-Durl填寫nexus中3rd-party的連接,-DrepositoryId填寫在settings.xml配置的認證信息的id。

mvn deploy:deploy-file  -Dfile=G:\5jar\edu.mit.jwi_2.3.3_jdk.jar -DgroupId=local.edu.stanford -DartifactId=edu.mit.jwi_jdk -Dversion=2.3.3 -Dpackaging=jar    -Durl=http://localhost:8081/repository/3rd-party/ -DrepositoryId=nexus-3rd-party

部署成功


手動部署到3rd-party倉庫的構件
  • 3rd-party倉庫設置了相同依賴不允許重復部署,所以再次部署會失敗。

關于部署第三方構件到本地倉庫,請查看maven---6倉庫---->3.2.2.3安裝第三方構件到本地倉庫

6Nexus的權限管理

6.1需求

處于安全考慮,在組織內部中如果希望只有管理員才能配置Nexus,只有某些團隊成員才能部署構件,或者更細要求,例如每個項目都有自己的Nexus宿主倉庫,且只能部署項目構件至該倉庫,Nexus提供了全面的權限控制特性,能讓用戶自由根據需求配置Nexus用戶(user)、角色(role)、權限(privilege).

6.2介紹

nexus中關于安全的官方詳細介紹

nexus操作界面

6.1.1權限privilege

  • Nexus是基于權限(privilege)做訪問控制的,服務器每一個資源都有相應的權限來控制,用戶只需特定操作必要擁有必要的權限。
權限

6.1.2角色(role)

  • 管理員必須以角色(role)的方式將權限賦予Nexus用戶,例如訪問nexus中搜索頁面需要nx-search-read權限,而nexus中配置的角色nx-anonymous角色就擁有該權限,將這個角色分配給某個用戶就可以訪問nexus中搜索頁面了。角色還可以包含一個或多個角色。
nx-anonymous角色擁有的權限

6.1.3用戶(user)

  • 用戶可以被賦予一個或多個角色,角色可以包含一個或者多個權限,角色可以包含一個或多個其它角色。


    用戶

7Nexus的調度任務

  • Nexus提供了一系列可配置的調度任務來方便用戶管理系統,用戶可以設定這些任務運行方式,例如:每天、每周、手動等,任務調度會在適當的時候在后臺運行,當然用戶還是能夠在界面觀察他們的狀態。
  • Nexus包含了以下幾種類型的調度任務:


    任務類型
  • 創建任務


    Nexus管理界面左邊最下方
創建任務

8其他私服軟件

還沒接觸....

留言

有什么不懂的一起探討一下吧,歡迎留下寶貴意見,喜歡就點個贊吧(哈哈),多謝鼓勵。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,179評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,628評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,642評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,444評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,948評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,185評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,717評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,794評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,418評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,414評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,750評論 2 370

推薦閱讀更多精彩內容