歡迎訪問我的GitHub
https://github.com/zq2599/blog_demos
內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等;
關於nexus3
Java開發者常在內網部署nexus3作為以下用途:
- 中央倉庫的的快取;
- 內網私有倉庫;
接下來分別實戰這兩個功能;
環境資訊
- nexus3版本:3.19.1
- maven版本:3.6.3
- JDK:1.8.0_191
nexus3的部署
本文聚焦nexus3的使用,不在此討論部署的細節,推薦使用docker來部署,我這裡是在一臺家用NAS上通過docker部署的,詳情可參考《群暉DS218+做maven私服(nexus3)》
新建倉庫用作快取
這裡的中央倉庫選用阿里雲的,速度和穩定性都比較出色:
- 新建倉庫的操作如下圖:
- 在型別選擇頁面選中maven2(proxy),如下圖紅框:
- 接下來的頁面只要填兩處,名字:aliyun-proxy,remote storage:http://maven.aliyun.com/nexus/content/groups/public/ ,如下圖紅框:
- 提交表單後回到列表頁面,在新增的倉庫上點選copy按鈕即可得到倉庫地址,如下圖:
- 記下這個倉庫的地址(http://192.168.50.43:8081/repository/aliyun-proxy/),內網所有電腦都能從這裡地址獲取中央倉庫jar包,設定方法後面會說到;
新建倉庫用作私有倉庫
對於中央倉庫沒有的jar,以及專案中釋出的二方庫,都可以存放到私有倉庫;
- 再新建一個倉庫,型別選擇maven2(hosted),如下圖紅框:
- 名字:nexus-private,其他的不需要修改:
- 這裡要注意的是,如果您建立的私有倉庫用來儲存自己釋出的二方庫,最好建兩個,一個用來儲存正式釋出的,Version policy型別:Release,另一個儲存開發中的(maven本地不快取),Version policy型別是Snapshot,本文為了簡單起見只建了一個Release型別的;
- 記下這個倉庫的地址:http://192.168.50.43:8081/repository/nexus-private/
- 至此,倉庫建立完畢,我們一共有以下兩個倉庫:
快取型:http://192.168.50.43:8081/repository/aliyun-proxy/
本地私有型:http://192.168.50.43:8081/repository/nexus-private/ - 有了倉庫,接下來設定開發環境上的Maven了;
Maven設定(使用快取倉庫)
先做aliyun-proxy倉庫的設定,這樣就可以使用nexus3的快取功能了:
- 開啟maven的配置檔案settings.xml;
- 找到mirrors節點,增加一個server而配置,內容如下:
<mirror>
<id>aliyun-proxy</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.50.43:8081/repository/aliyun-proxy/</url>
</mirror>
- 快取倉庫的設定已經完成了,接下來通過構建maven工程驗證一下,下面是個最簡單的maven工程的pom.xml檔案:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.bolingcavalry</groupId>
<artifactId>nexus3demo</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.28</version>
</dependency>
</dependencies>
</project>
- 在pom.xml所在目錄執行命令:mvn clean compile -U -DskipTests ,如下圖,可見是通過nexus3下載中央倉庫的jar,然後專案構建成功:
中央倉庫不存在的jar
私有倉庫的一個重要功能,就是提供中央倉庫之外的jar下載,接下來舉個例子:
- 在pom.xml中新增一箇中央倉庫不存在的jar:
<dependency>
<groupId>io.confluent</groupId>
<artifactId>kafka-schema-registry-client</artifactId>
<version>3.3.1</version>
</dependency>
- 再去構建就會報錯:
上述問題是常見的,有的jar沒有釋出到中央倉庫,用maven構建時找不到就報錯了。
上傳jar到私有倉庫
解決上述問題的思路:找到這個jar -> 上傳到私有倉庫 -> maven構建時從私有倉庫下載這個jar;
- 思路有了,現在來試著用私有倉庫解決上面的問題;
- 把上述jar下載到本地,下載地址:http://packages.confluent.io/maven/io/confluent/kafka-schema-registry-client/3.3.1/kafka-schema-registry-client-3.3.1.jar
- 登入nexus3,按照如下步驟操作:
- 填寫表單,按照下圖步驟操作,把jar檔案提交到nexus3:
- 現在私有倉庫中已經有jar了,接下來看看maven如何使用這個jar檔案;
maven使用私有倉庫
- 開啟maven的配置檔案settings.xml;
- 找到profiles節點,增加一個profile的配置,內容如下:
- 找到activeProfiles節點,增加一個activeProfile而配置,內容如下:
<activeProfile>nexus3</activeProfile>
- 找到剛才新增的mirror,修改其mirrorOf節點的值,修改後的mirror節點值如下:
<mirror>
<id>aliyun-proxy</id>
<mirrorOf>external:local-nexus3</mirrorOf>
<url>http://192.168.50.43:8081/repository/aliyun-proxy/</url>
</mirror>
- mirrorOf的值從之前的*改成external:local-nexus3,是做了轉發邏輯的排除操作,這樣做了之後,local-nexus3倉庫的請求會轉發到私有倉庫,而其他所有的請求都轉發到了快取倉庫aliyun-proxy;
- 再次構建剛才的maven專案,這次終於構建成功了,如下圖,kafka-schema-registry-client相關的資料都從私有倉庫下載:
至此,nexus3常用的快取和私有倉庫功能都嘗試過了,如果您正在搭建私有maven倉庫,希望本文能夠給您提供參考。
歡迎關注公眾號:程式設計師欣宸
微信搜尋「程式設計師欣宸」,我是欣宸,期待與您一同暢遊Java世界...
https://github.com/zq2599/blog_demos