概述
主要學(xué)習(xí)記錄Maven倉(cāng)庫(kù)相關(guān)知識(shí),如何借助上傳項(xiàng)目jar包到GitHub、Nexus Sonatype,,以及搭建自己的Nexus Sonatype私服,然后在Maven項(xiàng)目的pom文件引入使用,參考Maven官網(wǎng)文檔:https://central.sonatype.org/publish/publish-maven/
需要了解:Maven中央倉(cāng)庫(kù)并不支持直接發(fā)布jar 包,需要將jar 包發(fā)布到一些指定的第三方Maven倉(cāng)庫(kù),然后該倉(cāng)庫(kù)再將jar 包同步到Maven中央倉(cāng)庫(kù),Sonatype便是Maven中央倉(cāng)庫(kù)指定的暫存庫(kù)。
目錄
- 借助GitHub搭建屬于自己的maven倉(cāng)庫(kù)
- 借助Nexus Sonatype發(fā)布jar包到sonatype倉(cāng)庫(kù)
- 在sonatype提交發(fā)布工單(Issue)
- 配置gpg秘鑰連接sontype倉(cāng)庫(kù),配置pom.xml和setting.xml
- 發(fā)布執(zhí)行mvn clean deploy
- 借助Nexus Sonatype搭建自己的maven私服
一、借助GitHub搭建屬于自己的maven私服倉(cāng)庫(kù)
參考:https://juejin.cn/post/6979850007692181535,https://developer.aliyun.com/article/924317
1、首先本地創(chuàng)建文件夾用于本地倉(cāng)庫(kù),待會(huì)需要推送到遠(yuǎn)程GitHub倉(cāng)庫(kù),如我的D:\mysoftware_notinstall\maven-3.9\github-maven-repository,然后在該文件下可以添加說(shuō)明文件README.md,并創(chuàng)建repository文件夾,以后發(fā)布的jar需要整到該文件夾,然后傳到遠(yuǎn)程倉(cāng)庫(kù)。
2、新建遠(yuǎn)程倉(cāng)庫(kù),比如我的倉(cāng)庫(kù)地址是:https://github.com/sichaolong/maven-repository,然后創(chuàng)建 發(fā)行分支release、快照分支snapshot,方便jar包版本管理,最后將本地的maven-repository推送到遠(yuǎn)程倉(cāng)庫(kù)github-maven-repository。
3、執(zhí)行deploy腳本發(fā)布包,為了方便直接封裝一個(gè)腳本,將該腳本復(fù)制到待發(fā)布的項(xiàng)目根目錄,執(zhí)行 ./deploy.sh s
即可,其中s表示snapshot,r表示release。
#!/bin/bash
if [ $# != 1 ];then
echo 'deploy argument [snapshot(s for short) | release(r for short) ] needed!'
exit 0
fi
## deploy參數(shù),snapshot 表示快照包,簡(jiǎn)寫(xiě)為s, release表示正式包,簡(jiǎn)寫(xiě)為r
arg=$1
# 本地倉(cāng)庫(kù)
DEPLOY_PATH=D:\\mysoftware_notinstall\\maven-3.9\\github-maven-repository
CURRENT_PATH=`pwd`
deployFunc(){
br=$1
## 快照包發(fā)布
cd $DEPLOY_PATH
## 切換對(duì)應(yīng)分支
git checkout $br
cd $CURRENT_PATH
# 開(kāi)始deploy, scl可以任意寫(xiě),后面的地址為本地倉(cāng)庫(kù)的reposity文件夾
mvn clean deploy -DaltDeploymentRepository=scl::default::file:D:\\mysoftware_notinstall\\maven-3.9\\github-maven-repository\\repository
# deploy 完成,提交
cd $DEPLOY_PATH
git add .
git commit -m 'deploy'
git push origin $br
# 合并master分支
git checkout master
git merge $br
git add .
git commit -m 'merge'
git push origin master
cd $CURRENT_PATH
}
if [ $arg = 'snapshot' ] || [ $arg = 's' ];then
## 快照包發(fā)布
deployFunc snapshot
elif [ $arg = 'release' ] || [ $arg = 'r' ];then
## 正式包發(fā)布
deployFunc release
else
echo 'argument should be snapshot(s for short) or release(r for short). like: `sh deploy.sh snapshot` or `sh deploy.sh s`'
fi
sleep 100000
5、測(cè)試使用,首先修改maven的settings.xml文件引入GitHub倉(cāng)庫(kù)地址,然后在另外一個(gè)項(xiàng)目的pom文件引入剛發(fā)布的jar包坐標(biāo)即可。
settings.xml
<profile>
<repositories>
<repository>
<id>sichaolong-maven-repo-snap</id>
<url>https://github.com/sichaolong/maven-repository/snap/repository</url>
</repository>
<repository>
<id>sichaolong-maven-repo-release</id>
<url>https://github.com/sichaolong/maven-repository/release/repository</url>
</repository>
</repositories>
</profile>
pom.xml
<!--測(cè)試發(fā)布在github倉(cāng)庫(kù)的jar包-->
<dependency>
<groupId>scl</groupId>
<artifactId>github-maven-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
二、借助Nexus Sonatype發(fā)布jar包到sonatype倉(cāng)庫(kù)
2.1 在Nexus Sonatype注冊(cè)賬號(hào)并提交工單
其實(shí)和上面GitHub的當(dāng)作maven倉(cāng)庫(kù)原理一樣,只不過(guò)GitHub是免費(fèi)的公共倉(cāng)庫(kù),而sonatype是一個(gè)第三方的倉(cāng)庫(kù)。
為什么需要Nexus Sonatype:Maven中央倉(cāng)庫(kù)并不支持直接發(fā)布jar包。我們需要將jar包發(fā)布到一些指定的第三方Maven倉(cāng)庫(kù),然后該倉(cāng)庫(kù)再將jar包同步到Maven中央倉(cāng)庫(kù)。其中,最”簡(jiǎn)單”的方式是通過(guò)Sonatype OSSRH倉(cāng)庫(kù)來(lái)發(fā)布jar包。接下來(lái),我會(huì)介紹如何將jar包發(fā)布到Sonatype OSSRH。
注冊(cè)以及登錄地址:https://issues.sonatype.org/login.jsp,登錄之后需要提交一個(gè)issue
然后按照下圖選擇
接下來(lái)需要填內(nèi)容審核,審核是機(jī)器做的
主要是幾個(gè)地方要注意:
問(wèn)題名稱,只要大概表達(dá)清楚意思即可
groupId要寫(xiě)準(zhǔn)確
Porject URL填寫(xiě)Github倉(cāng)庫(kù)地址
SCM url需要在Github倉(cāng)庫(kù)地址后帶git后綴
提交后,我本來(lái)以為是人工審核,其實(shí)是全自動(dòng)機(jī)器人自動(dòng)回復(fù)你。它要求你證明你對(duì)groupId的網(wǎng)址有 所有權(quán),比如我填寫(xiě)的是cn.monitor4all,那么我就要在monitor4all.cn的網(wǎng)站上,添加一個(gè)TXT解析,指向這個(gè)Issue(值寫(xiě)為OSSRH-xxxxx).
如果你是的groupId填寫(xiě)的是com.github.xxx,則不需要做上述的步驟。所以如果自己沒(méi)有域名,或者嫌麻煩的,直接用com.github.xxx即可。
我的填寫(xiě)參考,這里并沒(méi)使用剛才創(chuàng)建的倉(cāng)庫(kù),而是使用一個(gè)git@github.com:sichaolong/simple-log-solution-scl.git
,后續(xù)改動(dòng)
更新:需要使用io.github.xxx,上圖填寫(xiě)的groupid錯(cuò)誤,注意更新完別忘記Open issue
然后等待即可
2.2 配置GPG密鑰連接自己的私服、配置pom.xml和setting.xml
除了ApacheMaven安裝之外,您還必須安裝GPG客戶端 和Maven GPG插件要求的命令行路徑。更多 信息請(qǐng)參閱
http://www.gnupg.org/as 以及插件文檔和下面。
GPG是Maven的一個(gè)工具插件,GPG是一種RSA算法的實(shí)現(xiàn)。主要作用是鑒權(quán)用的,sonatype既然允許你上傳到公有倉(cāng)庫(kù),肯定要鑒權(quán)。防止其他惡意的人上傳Jar包。
我們?nèi)ス倬W(wǎng)下載Windows 可視化 GunPG:https://www.gnupg.org/download/ 或者 https://gpg4win.org/get-gpg4win.html 下載安裝之后生成證書(shū),然后看到
點(diǎn)擊在服務(wù)器發(fā)布,然后等待即可,然后就是配置Maven的settings.xml
<profiles>
<profile>
<id>ossrh</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<gpg.executable>你的gpg的可執(zhí)行path</gpg.executable>
<gpg.passphrase>你的passphrase,可以在可視化界面更改</gpg.passphrase>
</properties>
</profile>
</profiles>
<servers>
<server>
<id>ossrh</id>
<username>你上面注冊(cè)的賬號(hào)</username>
<password>你上面注冊(cè)的密碼</password>
</server>
</servers>
</settings>
接下來(lái)就是配置項(xiàng)目pom.xml,設(shè)計(jì)打包插件保證項(xiàng)目能發(fā)布到sonatype倉(cāng)庫(kù)
<distributionManagement>
<!-- 申明打包到sonatype公有倉(cāng)庫(kù) -->
<snapshotRepository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
<build>
<plugins>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.7</version>
<extensions>true</extensions>
<configuration>
<serverId>ossrh</serverId>
<nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
也可以添加一下自己的信息以及LICENES
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>actable</distribution>
</license>
</licenses>
<developers>
<developer>
<name>sichaolong</name>
<email>2589165806@qq.com</email>
<organization>io.github.sichaolong</organization>
</developer>
</developers>
<scm>
<tag>master</tag>
<url>git@github.com:sichaolong/simple-log-solution-scl.git</url>
<connection>git@github.com:sichaolong/simple-log-solution-scl.git</connection>
<developerConnection>git@github.com:sichaolong/simple-log-solution-scl.git</developerConnection>
</scm>
2.3 發(fā)布到Nexus Sonatype倉(cāng)庫(kù)
最后就是正式打包發(fā)布,執(zhí)行 mvn clean deploy
,等待發(fā)布上傳完成即可
ps:需要注意的問(wèn)題是groupId需要和上面申請(qǐng)的sonatype的保持一致
根據(jù)坐標(biāo)訪問(wèn)sonatype倉(cāng)庫(kù)查看結(jié)果,位置在上文pom文件配置的路徑,比如我的https://s01.oss.sonatype.org/content/repositories/snapshots/io/github/sichaolong/
測(cè)試使用,在另外一個(gè)項(xiàng)目pom導(dǎo)入坐標(biāo)
<!-- 測(cè)試發(fā)布在nexus-sonatype的jar包-->
<dependency>
<groupId>io.github.sichaolong</groupId>
<artifactId>nexus-sonatype-maven-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
三、借助Nexus Sonatype搭建自己的maven私服
如果不想使用上面的方式,而是使用公司內(nèi)網(wǎng)或者是局域網(wǎng)搭建一個(gè)倉(cāng)庫(kù),小范圍使用,可以使用Nexus Sonatype搭建自己的maven私服。
Maven 私服的概念就是在本地架設(shè)一個(gè) Maven 倉(cāng)庫(kù)服務(wù)器,在代理遠(yuǎn)程倉(cāng)庫(kù)的同時(shí)維護(hù)本地倉(cāng)庫(kù)。當(dāng)我們需要下載一些構(gòu)件(artifact)時(shí),如果本地倉(cāng)庫(kù)沒(méi)有,再去私服下載,私服沒(méi)有,再去中央倉(cāng)庫(kù)下載。這樣做會(huì)有如下一些優(yōu)點(diǎn):
減少網(wǎng)絡(luò)帶寬流量
加速 Maven 構(gòu)建
部署第三方構(gòu)件
提高穩(wěn)定性、增強(qiáng)控制
降低中央倉(cāng)庫(kù)的負(fù)載
參考:https://www.hangge.com/blog/cache/detail_2844.html,https://juejin.cn/post/6844903991600480269
1、訪問(wèn)官網(wǎng)下載Nexus,地址:https://help.sonatype.com/repomanager3/product-information/download,我這里選擇Windows 3.x版本的zip包。
解壓后會(huì)得到兩個(gè)文件夾:nexus-3.56.0-01(nexus 服務(wù)目錄)、sonatype-work(私有庫(kù)目錄)
2、配置私服,其中 etc/nexus-default.properties 文件配置端口(默認(rèn)為 8081)和 work 目錄信息,我們可以按需修改。
3、啟動(dòng)登錄,Nexus 服務(wù)啟動(dòng)以后,我們使用瀏覽器訪問(wèn) http://IP:8081/,注意啟動(dòng)需要一管理員權(quán)限執(zhí)行
C:\Windows\System32>d:\mysoftware_notinstall\nexus-3.56.0-01-win64\nexus-3.56.0-01\bin\nexus.exe /install
Installed service 'nexus'.
C:\Windows\System32>d:\mysoftware_notinstall\nexus-3.56.0-01-win64\nexus-3.56.0-01\bin\nexus.exe /start
Starting service 'nexus'.
# 等待一會(huì)即可
4、使用, 下面是一些概念說(shuō)明,之后就可以測(cè)試使用了。
(1)默認(rèn)倉(cāng)庫(kù)說(shuō)明:
maven-central:maven 中央庫(kù),默認(rèn)從 https://repo1.maven.org/maven2/ 拉取 jar
maven-releases:私庫(kù)發(fā)行版 jar,初次安裝請(qǐng)將 Deployment policy 設(shè)置為 Allow redeploy
maven-snapshots:私庫(kù)快照(調(diào)試版本)jar
maven-public:倉(cāng)庫(kù)分組,把上面三個(gè)倉(cāng)庫(kù)組合在一起對(duì)外提供服務(wù),在本地 maven 基礎(chǔ)配置 settings.xml 或項(xiàng)目 pom.xml 中使用
(2)倉(cāng)庫(kù)類型說(shuō)明:
group:這是一個(gè)倉(cāng)庫(kù)聚合的概念,用戶倉(cāng)庫(kù)地址選擇 Group 的地址,即可訪問(wèn) Group 中配置的,用于方便開(kāi)發(fā)人員自己設(shè)定的倉(cāng)庫(kù)。maven-public 就是一個(gè) Group 類型的倉(cāng)庫(kù),內(nèi)部設(shè)置了多個(gè)倉(cāng)庫(kù),訪問(wèn)順序取決于配置順序,3.x 默認(rèn)為 Releases、Snapshots、Central,當(dāng)然你也可以自己設(shè)置。
hosted:私有倉(cāng)庫(kù),內(nèi)部項(xiàng)目的發(fā)布倉(cāng)庫(kù),專門用來(lái)存儲(chǔ)我們自己生成的 jar 文件
snapshots:本地項(xiàng)目的快照倉(cāng)庫(kù)
releases: 本地項(xiàng)目發(fā)布的正式版本
proxy:代理類型,從遠(yuǎn)程中央倉(cāng)庫(kù)中尋找數(shù)據(jù)的倉(cāng)庫(kù)(可以點(diǎn)擊對(duì)應(yīng)的倉(cāng)庫(kù)的 Configuration 頁(yè)簽下 Remote Storage 屬性的值即被代理的遠(yuǎn)程倉(cāng)庫(kù)的路徑),如可配置阿里云 maven 倉(cāng)庫(kù)
central:中央倉(cāng)庫(kù)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-553687.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-553687.html
到了這里,關(guān)于Maven學(xué)習(xí)1_將項(xiàng)目打包jar然后上傳到GitHub、Nexus Sonatype倉(cāng)庫(kù)、搭建Sonatype私服的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!