Nexus 私服搭建基本流程

Nexus 私服搭建基本流程

Nexus 是什麼?

用於實現Maven構建私人倉庫的一個工具。html

可使用nexus 統一管理咱們到依賴,再也不須要再從中央倉庫下載對應的jar包java

什麼是Nexus 私服?

私服是在局域網的一種特殊的遠程倉庫,目的是代理遠程倉庫及部署第三方構件。有了私服以後,當 Maven 須要下載jar包時,先請求私服,私服上若是存在則下載到本地倉庫。不然,私服直接請求外部的遠程倉庫,將jar包下載到私服,再提供給本地倉庫下載。apache

<!-- more -->緩存

maven的依賴管理

簡介:依賴是maven最爲用戶熟知的特性之一,單個項目的依賴管理並不難,可是要管理幾個或者幾十個模塊的時,那這個依賴應該怎麼管理服務器

  • 依賴的傳遞性oracle

    • 傳遞性依賴是在maven2中添加的新特徵,這個特徵的做用就是你不須要考慮你依賴的庫文件所須要依賴的庫文件,可以將依賴模塊的依賴自動的引入。
  • 依賴的做用範圍maven

    • compileide

      • 這是默認範圍,編譯依賴對項目全部的classpath均可用。此外,編譯依賴會傳遞到依賴的項目
    • provided工具

      • 表示該依賴項將由JDK或者運行容器在運行時提供,也就是說由Maven提供的該依賴項咱們只有在編譯和測試時纔會用到,而在運行時將由JDK或者運行容器提供。
    • runtime測試

      • 代表編譯時不須要依賴,而只在運行時依賴
    • test

      • 只在編譯測試代碼和運行測試的時候須要,應用的正常運行不須要此類依賴。
    • system

      • 系統範圍與provided相似,不過你必須顯式指定一個本地系統路徑的JAR,此類依賴應該一直有效,Maven也不會去倉庫中尋找它。

        <project>  
          ...  
          <dependencies>  
            <dependency>  
              <groupId>sun.jdk</groupId>  
              <artifactId>tools</artifactId>  
              <version>1.5.0</version>  
              <scope>system</scope>  
              <systemPath>${java.home}/../lib/tools.jar</systemPath>  
            </dependency>  
          </dependencies>  
          ...  
        </project>
    • import

      • 範圍只適用於<dependencyManagement>部分。代表指定的POM必須使用<dependencyManagement>部分的依賴。由於依賴已經被替換,因此使用import範圍的依賴並不影響依賴傳遞。
  • 依賴的兩大原則

    • 路徑近者優先

      A > B > C-1.0
      A > C-2.0
    • 第一聲明優先

      A > B > D-1.0
      A > C > D-2.0
  • 依賴的管理

    • 依賴排除

      • 任何可傳遞的依賴均可以經過 "exclusion" 元素被排除在外。舉例說明,A 依賴 B, B 依賴 C,所以 A 能夠標記 C 爲 "被排除的"
    • 依賴可選

      • 任何可傳遞的依賴能夠被標記爲可選的,經過使用 "optional" 元素。例如:A 依賴 B, B 依賴 C。所以,B 能夠標記 C 爲可選的, 這樣 A 就能夠再也不使用 C。

如何解決jar包衝突

簡介:當出現jar包衝突時,咱們應該如何快速定位和處理jar包衝突問題

  • 命令: mvn dependency:tree -Dverbose

Nexus私服的祕密花園

簡介:介紹nexus服務器預置的倉庫

  • 類型介紹

    • hosted:是本地倉庫,用戶能夠把本身的一些jar包,發佈到hosted中,好比公司的第二方庫
    • proxy,代理倉庫,它們被用來代理遠程的公共倉庫,如maven中央倉庫。不容許用戶本身上傳jar包,只能從中央倉庫下載
    • group,倉庫組,用來合併多個hosted/proxy倉庫,當你的項目但願在多個repository使用資源時就不須要屢次引用了,只須要引用一個group便可
    • virtual,虛擬倉庫基本廢棄了。
  • 預置倉庫

    • Central:該倉庫代理Maven中央倉庫,其策略爲Release,所以只會下載和緩存中央倉庫中的發佈版本構件。
    • Releases:這是一個策略爲Release的宿主類型倉庫,用來部署正式發佈版本構件
    • Snapshots:這是一個策略爲Snapshot的宿主類型倉庫,用來部署開發版本構件。
    • 3rd party:這是一個策略爲Release的宿主類型倉庫,用來部署沒法從maven中央倉庫得到的第三方發佈版本構件,好比IBM或者oracle的一些jar包(好比classe12.jar),因爲受到商業版權的限制,不容許在中央倉庫出現,若是想讓這些包在私服上進行管理,就須要第三方的倉庫。
    • Public Repositories:一個組合倉庫

Nexus 下載地址

Nexus 官方網站

快速入門

搭建Maven Nexus

  1. 進入 Nexus 官方網站
  2. 在首頁選擇 「GET PREPOSITORY OSS」
  3. 頁面拉倒最下面,點擊 OSS2

  1. 因爲Maven Nexus 是收費的,這裏咱們須要使用免費的版本

  1. 下載以後,會獲得以下內容

  1. 此時調出 cmd, 進入目錄D:\java\Nexus\nexus-latest-bundle\nexus-2.14.15-01\bin
  2. 運行 nexus.bat start,能夠發現會拒絕訪問

  1. 使用管理員模式運行

    • 運行 nexus.bat install 安裝
    • nexus.bat start 啓動服務

  1. 訪問 http://localhost:8081/nexus進入到nexus 頁面

  1. 進入主頁

創建第一個我的倉庫

  1. 完成上一節內容以後,進入主頁面,點擊右上角Log In 登錄系統

  1. Nexus 默認到用戶名稱和密碼爲 admin 以及 admin123,輸入帳戶名和密碼以後登錄系統

  1. 登錄以後會發現界面發生了改變,由於此時咱們擁有了對應到權限

  1. 點擊 add,選擇 Hosted Repository 改含義會在後面進行解釋

  1. 如圖所示,基本上只須要填寫不多到內容,就能夠完成一個倉庫到建立,點擊下方到save按鈕便可建立一個倉庫

  1. 查看配置,能夠看到改倉庫被放到了一個默認的地址裏面

將Jar包項目加入到我的倉庫

這裏以一個本身的項目做爲測試

Maven依賴以下:

<dependency>
    <groupId>org.smart4j</groupId>
    <artifactId>smart-framwork</artifactId>
    <version>1.0.0</version>
</dependency>

咱們須要先登陸Maven Nexus,具有管理員的權限,而後點擊3rd party(三方依賴),截圖內容以下

依照截圖填入以下的依賴

GAV Definition: 定義GAV

Auto Guess:自動猜想

Group:同Maven 到 group定義

Artifact:同Maven 到 Artifact定義

Version:版本號

Packaging:打包方式

下方須要上傳依賴對應到jar包

上傳以後須要添加到maven Nexus

等待上傳,上傳成功以後會給予對應到提示信息

上傳完成以後,咱們能夠點擊Browse Index 看到本身以前上傳的依賴

默認狀況下咱們到公共訪問地址以下:

http://localhost:8081/nexus/content/groups/public 公共倉庫的訪問地址

將我的倉庫的jar包添加到項目當中

把jar包添加到nexus以後,咱們能夠嘗試讓nexus來管理咱們到項目依賴了

接下來介紹如何使用maven nexus 來關聯咱們到依賴

  1. 咱們須要創建一個存在pom文件的項目,把對應到pom依賴引入
注意:事先查看nexus公有倉庫是否存在依賴
  1. 在Maven 的 conf 下面增長配置,以我的爲例進入D:\java\apach\apache-maven-3.6.0\conf,修改setting.xml,添加以下內容
<!-- 添加 nexus 訪問權限 -->
<servers>    
    <server>
      <id>xdclass</id>
      <username>admin</username>
      <password>admin123</password>    
    </server>

  </servers>


<mirrors>
    <!-- 自定義 nexus -->
     <mirror>
        <id>xdclass</id>
        <mirrorOf>nexus,central</mirrorOf>
        <url>http://localhost:8081/nexus/content/groups/public/</url>
        <name>local nexus</name>  
    </mirror>
    <!-- 阿里雲配置 -->
    <mirror>  
      <id>alimaven</id>  
      <name>aliyun maven</name>  
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
      <mirrorOf>central</mirrorOf>          
    </mirror>  
    
</mirrors>
<profiles>
    <profile>
        <id>xd</id>
        <repositories>
            <repository>
                <id>local-nexus</id>
                <!-- 本地倉庫路徑 -->
                <url>http://localhost:8081/nexus/content/groups/public/</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <!-- 開啓快照 -->
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
        </repositories>
    </profile>
</profiles>

<!-- 須要 開啓 Profile 配置 -->
<activeProfiles>
    <activeProfile>xd</activeProfile>
</activeProfiles>
  1. 在IDEA中從新導入依賴

將我的到Maven項目發佈到Nexus管理

本節介紹如何把本身的項目發佈到nexus ,這裏單獨開了一個倉庫進行配置

在進行本節內容以前,查看Maven 到 setting.xml內容

<!-- 用於發佈正式版本 -->
<server>
    <id>public</id>
    <username>admin</username>
    <password>admin123</password>    
</server>
<!-- 測試 -->
<server>
    <id>lazytime</id>
    <username>admin</username>
    <password>admin123</password>    
</server>
  1. 在須要發佈源代碼到mavne項目pom.xml添加以下內容
<build>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
            <plugins>
                <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.1.0</version>
                </plugin>
                <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.22.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.5.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                </plugin>
                <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
                <plugin>
                    <artifactId>maven-site-plugin</artifactId>
                    <version>3.7.1</version>
                </plugin>

            </plugins>
        </pluginManagement>
    </build>


    <distributionManagement>
        <repository>
            <!-- 此id 必須對應setting 裏面到 server id 不然會沒有權限沒法部署 -->
            <id>public</id>
            <url>http://localhost:8081/nexus/content/repositories/lazytime</url>
        </repository>

    </distributionManagement>
  1. 以IDEA爲例,deloyer 項目到 maven Nexus

運行Maven Deloy發佈項目到nexus

  1. 查看Maven Nexus ,查看發佈的項目內容

若是不能發佈,請查看倉庫是否容許從新部署:

使用Snapshots 快照快捷管理項目迭代

使用上一節辦法存在很大到缺點:

  1. 每次改動源代碼就須要發佈一個新版本,使用者就須要更新pom文件到項目版本號,或者本地倉庫刪掉舊依賴,從新引入依賴,這樣很是麻煩
  2. 每次更新項目都須要通知使用者更新版本號

如何解決如上問題呢?

那麼咱們就須要使用快照,快照至關於項目到一個副本,咱們能夠在開發到時候使用快照,發佈到時候在使用正式到版本號進行處理,使nexus的管理更加方便

  1. 打開maven nexus 主頁,登錄管理員帳戶,查看以下內容

  1. Mavensetting文件當中添加以下內容,加入到對應的帳號
<server>
        <id>snapshots</id>
        <username>admin</username>
        <password>admin123</password>    
    </server>
  1. 修改項目版本號,必定要依照maven到 snaphoto 規則,不然部署快照版本會失敗
<modelVersion>4.0.0</modelVersion>
<groupId>org.smart4j</groupId>
<artifactId>smart-framwork</artifactId>
<!-- 寫法必定要規範 -->
<version>1.0-SNAPSHOT</version>
  1. 執行maven deloy 部署配置

注意待發布項目的pom.xml配置以下

<distributionManagement>
        <snapshotRepository>
            <id>snapshots</id>
            <url>http://localhost:8081/nexus/content/repositories/snapshots</url>
        </snapshotRepository>
    </distributionManagement>

  1. 查看Maven Nexus 是否發佈成功

再次強調,若是部署失敗,請查看倉庫是否容許重複部署
  1. 接下來咱們試下快照是如何解決版本迭代的問題的

因爲使用了快照版本,須要更改依賴以下:

<dependency>
    <groupId>org.smart4j</groupId>
    <artifactId>smart-framwork</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
  1. 咱們添加了一個main方法,而後點擊IDEA deploy,部署快照版本的項目

  1. 咱們在引用到項目裏面能夠看到項目已經引用到了本地當中

相關文章
相關標籤/搜索