利用Docker搭建Nexus私有倉庫實現(xiàn)Maven私服
一、前言
相信國內(nèi)的小伙伴都經(jīng)歷過,Gradle、Maven、NPM下拉速度過慢的情況。我們一般的做法是配置阿里云這樣的中央倉庫。加速問題是可以采用這種方式解決,但如果是團隊內(nèi)部的庫想進行上傳分發(fā),傳到Maven Central這種共用的Maven倉庫就不太合適了。那樣保密性和時效性都將收到破壞。所以在團隊內(nèi)部,我們一般都會搭建局域網(wǎng)內(nèi)私有的中央倉庫。支撐這種私有倉庫的軟件就是Nexus,本文將詳細介紹如何從零搭建、上傳庫、下拉庫整個使用過程。
二、Nexus搭建
現(xiàn)如今萬物皆可Docker,我們沒必要破壞本機系統(tǒng)原生安裝了。直接新建一個docker-compose.yml
文件,寫入如下內(nèi)容:
version: '3.1' services: nexus: restart: always image: sonatype/nexus3 container_name: nexus ports: - 6005:8081 volumes: - /data/Docker/nexus/data:/nexus-data
注意最后一行volumens
映射的位置,如需備份還原,只需要將這個文件夾打包恢復即可。
寫好后,運行docker-compose up -d
運行即可。然后訪問服務(wù)器的6005
端口,看到這個界面就算搭建成功了。
三、配置倉庫
搭建好后,會有一些默認的倉庫:
maven-central:maven 中央庫,默認從 https://repo1.maven.org/maven2/ 拉取 jar
maven-releases:私庫發(fā)行版 jar maven-snapshots:私庫快照(調(diào)試版本)jar
maven-public:倉庫分組,把上面三個倉庫組合在一起對外提供服務(wù)
概念說明:
group:這是一個倉庫聚合的概念,用戶倉庫地址選擇 Group 的地址,即可訪問 Group中配置的,用于方便開發(fā)人員自己設(shè)定的倉庫。maven-public 就是一個 Group 類型的倉庫,內(nèi)部設(shè)置了多個倉庫,訪問順序取決于配置順序,3.x 默認為Releases、Snapshots、Central,當然你也可以自己設(shè)置。
hosted:私有倉庫,內(nèi)部項目的發(fā)布倉庫,專門用來存儲我們自己生成的 jar 文件 snapshots:本地項目的快照倉庫
releases: 本地項目發(fā)布的正式版本
proxy:代理類型,從遠程中央倉庫中尋找數(shù)據(jù)的倉庫(可以點擊對應(yīng)的倉庫的Configuration 頁簽下 Remote Storage 屬性的值即被代理的遠程倉庫的路徑),如可配置阿里云 maven 倉庫
central:中央倉庫
3.1 配置加速庫
我們通過上文了解到,Nexus默認會從maven.org拉取我們需要的公共庫。我們需要配置一個阿里云的加速庫,這樣凡是需要公共庫的都會優(yōu)先從阿里云加速下載。在設(shè)置中,點擊創(chuàng)建倉庫。
可以看到,我們可以創(chuàng)建多種倉庫,Docker、Maven、NPM、Yum都可以。本文就以Maven為例了,其他倉庫都類似。
可以寫個名字,然后在Remote Storage的地址欄中,輸入阿里云的Maven倉庫:http://maven.aliyun.com/nexus/content/groups/public/
寫好后,就可以保存了。然后再進入maven-public組的設(shè)置,將我們剛剛創(chuàng)建的aliyun-repository
代理庫添加到右邊,并調(diào)到第一個位置。這樣一些公共庫比如Spring就會默認從阿里云那邊下載,并且Nexus會自帶緩存功能,只有第一次需要下載。后續(xù)將直接從局域網(wǎng)的Nexus下載,大大加快了下載速度。(非常適合沒有外網(wǎng)開發(fā)的團隊)
3.2 創(chuàng)建私有倉庫
配置好Maven的基礎(chǔ)加速庫后,我們就來創(chuàng)建一個團隊內(nèi)部使用的Maven倉庫。我們繼續(xù)點擊創(chuàng)建倉庫,這里選擇maven2(hosted)
。
Version policy下面有Release(正式版)、Snapshots(測試版)、Mixed(混合)三個選項,其實和我們平時引用第三方的庫是一樣的,只是我們一般會引用第三方庫的正式版。Deployment policy這里我選擇了Allow redeploy可以覆蓋上傳,你可以根據(jù)自身情況調(diào)整下面這些參數(shù)。
創(chuàng)建好后就可以直接使用了。但在此之前,我們最好配置一下開發(fā)賬號,因為上傳庫的時候需要有賬號密碼。如果直接把系統(tǒng)管理員的賬號給開發(fā)者會比較危險,畢竟現(xiàn)在刪庫跑路的很多。
四、配置權(quán)限
在設(shè)置頁面的Roles里先創(chuàng)建一個角色:
然后只給這個開發(fā)這個角色,固定倉庫的瀏覽和編輯權(quán)限。
最后創(chuàng)建用戶,然后將該用戶名、密碼和該倉庫的地址給到開發(fā)者就可以了。
倉庫地址可以點擊列表中Copy得到:
五、上傳Jar包
上傳Jar包到私有倉庫的方式其實有很多種,我們一般項目中一般會采用Maven或Gradle腳本來進行。Maven大家應(yīng)該都比較熟了,我這里就用安卓人狂喜的Gradle來演示一下。在build.gradle中編寫如下腳本即可上傳。
方便大佬復制:
group 'com.niubi' version '1.0-SNAPSHOT' //加載插件 apply plugin: 'java' apply plugin: 'maven' apply plugin: 'idea' //配置打Jar包的參數(shù) javadoc { failOnError false options.addStringOption('Xdoclint:none', '-quiet') options.addStringOption('encoding', 'UTF-8') options.addStringOption('charSet', 'UTF-8') } //打包文檔 task javadocJar(type: Jar, dependsOn: javadoc) { classifier = 'javadoc' from 'build/docs/javadoc' } //打包源代碼 task sourcesJar(type: Jar, dependsOn: classes) { classifier = 'sources' from sourceSets.main.allSource } artifacts { archives jar archives javadocJar archives sourcesJar } uploadArchives { repositories { mavenDeployer { // 開發(fā)版 snapshotRepository(url: "http://XXX:6005/repository/GfptLib/") { authentication(userName: "xxx", password: "xxx") } /*// 正式版 repository(url: "http://XXX:8081/repository/maven-releases/") { authentication(userName: "xxx", password: "xxx") }*/ // 只發(fā)布jar包 addFilter('jar') {artifact, file -> artifact.ext == 'jar' } pom.groupId = "$project.group" pom.artifactId = "$project.name" pom.version = "$project.version" } } }
和Maven一樣,我們寫好后,可以直接在IDEA的Gradle窗口中看到這個命令,雙擊即可運行上傳:
運行成功后,就可以在Maven倉庫中看到該Jar包,并可以將該jar包引用到項目中去。
六、使用Jar包
和引用第三方庫的用法一樣,只需要將剛剛上傳jar包的坐標寫對后就可以使用:
compile("com.niubi:util:latest.integration")
當然,在倉庫依賴地址中,我們需要加入自己的Maven私服地址:
// 【倉庫設(shè)置】 repositories { // 使用本地倉庫 mavenLocal() // 使用團隊私服倉庫 maven { url "http://xxx:6005/repository/GfptLib/" } maven { url "http://xxx:6005/repository/maven-public/" } // 使用 Gradle 的自身默認配置加載倉庫 mavenCentral() }
重新編譯一下,就可以下載到我們剛剛上傳的Jar包了。
到此這篇關(guān)于Docker輕松搭建Nexus私有倉庫,實現(xiàn)Maven私服的文章就介紹到這了,更多相關(guān)Docker搭建Nexus私有倉庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker mysql修改root賬號密碼并賦予權(quán)限
本文主要介紹了docker mysql修改root賬號密碼并賦予權(quán)限,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07docker?搭建?vulhub?靶場環(huán)境的詳細過程
Vulhub是一個基于docker和docker-compose的漏洞環(huán)境集合,進入對應(yīng)目錄并執(zhí)行一條語句即可啟動一個全新的漏洞環(huán)境,讓漏洞復現(xiàn)變得更加簡單,讓安全研究者更加專注于漏洞原理本身,這篇文章給大家介紹docker?搭建?vulhub?靶場環(huán)境的過程,感興趣的朋友一起看看吧2022-08-08Docker 數(shù)據(jù)卷操作的實現(xiàn)
這篇文章主要介紹了Docker 數(shù)據(jù)卷操作的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-06-06如何通過Dockerfile 創(chuàng)建 kali-novnc
這篇文章主要介紹了如何通過Dockerfile 創(chuàng)建 kali-novnc,在Dockerfile所在目錄運行相關(guān)命令操作即可完成,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-04-04內(nèi)網(wǎng)環(huán)境下registry搭建步驟詳解
這篇文章主要為大家介紹了內(nèi)網(wǎng)環(huán)境下的registry搭建步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10Docker Compose搭建Redis主從復制環(huán)境的實現(xiàn)步驟
在Docker中搭建Redis主從架構(gòu)非常方便,下面是一個示例,演示如何使用Docker Compose設(shè)置一個Redis主從復制環(huán)境,文中有詳細的代碼示例,具有一定的參考價值,需要的朋友可以參考下2023-09-09