概述
??最近發(fā)布了自己的項(xiàng)目到maven
中央倉(cāng)庫(kù)棍厂、通過文章記錄一下颗味,第一方便自己,第二幫助他人牺弹,我想看這篇文章的同學(xué)肯定一定用過maven來(lái)構(gòu)建項(xiàng)目浦马,并且可能用過maven私服,上傳maven
中央倉(cāng)庫(kù)的起因是因?yàn)樽约壕帉懥艘粋€(gè)腳手架张漂,涉及到一部分和業(yè)務(wù)無(wú)關(guān)代碼晶默,想著是做個(gè)模塊放到項(xiàng)目里好還是獨(dú)立出來(lái)玩好呢,后來(lái)一想航攒,為了讓大家專注業(yè)務(wù)磺陡,還是分離出來(lái),并打包上傳到maven
中央倉(cāng)庫(kù)吧。在剛學(xué)習(xí)maven
的時(shí)候知道了倉(cāng)庫(kù)這個(gè)概念币他、本地坞靶、私服、云端圆丹。很久一來(lái)滩愁,都是玩本地躯喇,后來(lái)玩私服辫封,這不也玩起中央倉(cāng)庫(kù)了,那就分享一下經(jīng)驗(yàn)吧廉丽,分享的時(shí)候我盡力做到調(diào)理倦微、清晰、讓大家都看得懂正压,少走彎路欣福。
要求
- 只能將發(fā)行版上傳到中央存儲(chǔ)庫(kù)
- 具有
java doc
和代碼源文件 - 使用GPG/PGP簽名文件
- 足夠的源數(shù)據(jù)信息
步驟
準(zhǔn)備pom
坐標(biāo)(GAV)
- groupId:以反向域名開頭的項(xiàng)目的頂級(jí)名稱空間級(jí)別
- artifactId:組件的唯一名稱
- version:組件的版本字符串,版本可以是任意字符串焦履,但不能以結(jié)尾-SNAPSHOT拓劝,因?yàn)檫@是用于標(biāo)識(shí)當(dāng)前正在開發(fā)的版本的保留字符串。強(qiáng)烈建議使用[語(yǔ)義版本控制](http://semver.org)幫助您的用戶選擇版本嘉裤。
<groupId>cn.smallbun.scaffold</groupId>
<artifactId>scaffold-framework</artifactId>
<version>1.0.0</version>
項(xiàng)目名稱郑临,描述和URL
有關(guān)項(xiàng)目的一些人可讀的信息和指向你的項(xiàng)目的網(wǎng)站獲取更多,我們需要的存在name屑宠,description和url 厢洞。
<name>smallbun-scaffold-framework</name>
<description>smallbun企業(yè)級(jí)開發(fā)腳手架-核心框架</description>
<url>http://www.smallbun.cn</url>
一種常見且可接受的名稱慣例是使用Maven屬性從坐標(biāo)中將其組裝起來(lái):
<name>${project.groupId}:${project.artifactId}</name>
許可證信息
需要聲明用于分發(fā)組件的許可證
<!--Apache-->
<licenses>
<license>
<name>The Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<!--OR MIT-->
<licenses>
<license>
<name>MIT License</name>
<url>http://www.opensource.org/licenses/mit-license.php</url>
</license>
</licenses>
開發(fā)者信息
為了能夠關(guān)聯(lián)項(xiàng)目,需要添加一個(gè)開發(fā)人員部分典奉。
<!--開發(fā)人員信息-->
<developers>
<developer>
<name>zuoqinggang</name>
<email>qinggang.zuo@gmail.com</email>
<url>https://www.pingfangushi.com</url>
</developer>
</developers>
SCM 信息
與源代碼管理系統(tǒng)的連接是一個(gè)必需的元素躺翻。使用的語(yǔ)法取決于使用的版本控制系統(tǒng)。
-
connection
詳細(xì)說(shuō)明只讀連接卫玖。 -
developerConnection
詳細(xì)說(shuō)明讀取和寫入訪問連接詳細(xì)信息公你。 -
url
包含了一個(gè)Web
前端,您的SCM
系統(tǒng)的URL
假瞬。
Maven SCM文檔中提供了有關(guān)各種受支持格式的詳細(xì)信息陕靠,并提供了許多常見示例。
subversion
<scm>
<connection>scm:svn:http://subversion.example.com/svn/project/trunk/</connection>
<developerConnection>scm:svn:https://subversion.example.com/svn/project/trunk/</developerConnection>
<url>http://subversion.example.com/svn/project/trunk/</url>
</scm>
github
<scm>
<connection>scm:git:git://github.com/simpligility/ossrh-demo.git</connection>
<developerConnection>scm:git:ssh://github.com:simpligility/ossrh-demo.git</developerConnection>
<url>http://github.com/simpligility/ossrh-demo/tree/master</url>
</scm>
BitBucket
<scm>
<connection>scm:git:git://bitbucket.org/simpligility/ossrh-pipeline-demo.git</connection>
<developerConnection>scm:git:ssh://bitbucket.org:simpligility/ossrh-pipeline-demo.git</developerConnection>
<url>https://bitbucket.org/simpligility/ossrh-pipeline-demo/src</url>
</scm>
BitBucket上的Mercurial
<scm>
<connection>scm:hg:http://bitbucket.org/juven/hg-demo</connection>
<developerConnection>scm:hg:https://bitbucket.org/juven/hg-demo</developerConnection>
<url>http://bitbucket.org/juven/hg-demo</url>
</scm>
Apache Maven的Apache Git服務(wù)器上的Git
<scm>
<connection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</connection>
<developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</developerConnection>
<url>https://github.com/apache/maven/tree/${project.scm.tag}</url>
<tag>master</tag>
</scm>
完整的pom信息
<?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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.smallbun.scaffold</groupId>
<artifactId>scaffold-framework</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>smallbun-scaffold-framework</name>
<description>smallbun企業(yè)級(jí)開發(fā)腳手架-核心框架</description>
<url>http://www.smallbun.cn</url>
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<developers>
<developer>
<name>zuoqinggang</name>
<email>qinggang.zuo@gmail.com</email>
<url>https://www.pingfangushi.com</url>
</developer>
</developers>
<scm>
<connection>scm:git:git@github.com:pingfangushi/smallbun-scaffold-framework.git</connection>
<developerConnection>scm:git:git@github.com:pingfangushi/smallbun-scaffold-framework.git
</developerConnection>
<url>http://github.com/pingfangushi/smallbun-scaffold-framework/tree/master</url>
</scm>
...
</project>
Java doc和源代碼
要生成Javadoc和Source jar文件笨触,您必須配置javadoc和Source Maven插件懦傍。
<build>
<plugins>
<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>
<version>2.9.1</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
GPG簽名
??為了提高中央存儲(chǔ)庫(kù)的質(zhì)量,maven中央倉(cāng)庫(kù)要求工件(除校驗(yàn)和之外的所有文件)提供PGP簽名芦劣,并將公共密鑰分發(fā)到諸如http://pgp.mit.edu的密鑰服務(wù)器粗俱。
安裝GnuPG
??從http://www.gnupg.org/download/下載GPG
或使用您喜歡的軟件包管理器進(jìn)行安裝,然后通過運(yùn)行gpg --version
命令進(jìn)行驗(yàn)證虚吟。
注:在某些系統(tǒng)上寸认,將使用較新的gpg2:gpg2 --version
生成密鑰對(duì)
密鑰對(duì)使我們可以使用GPG對(duì)工件進(jìn)行簽名签财,然后用戶可以驗(yàn)證工件是否已由我們簽名。執(zhí)行命令根據(jù)提示提供用戶名偏塞、郵箱唱蒸,密碼信息。
gpg --gen-key
列出秘鑰
gpg --list-keys
列出可以使用的私鑰
gpg --list-secret-keys
輸出中pub
一行'/'后的8位HEX
字符串就是密鑰ID
上傳到服務(wù)器
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys <密鑰ID>
--keyserver
參數(shù)標(biāo)識(shí)目標(biāo)密鑰服務(wù)器地址灸叼,并使用--SEND-keys
是要分發(fā)密鑰的keyid
的神汹。您可以通過gpg --list-secret-keys
來(lái)獲取密鑰ID
。一旦提交給密鑰服務(wù)器古今,公鑰將同步到其他密鑰服務(wù)器屁魏。
pom配置
Maven GPG插件用于通過以下配置對(duì)組件進(jìn)行簽名。
<build>
<plugins>
<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>
上傳倉(cāng)庫(kù)
提交 issues
首先你需要有一個(gè)賬戶:點(diǎn)擊注冊(cè)
然后創(chuàng)建問題項(xiàng):創(chuàng)建問題
在未收到以解決的電子郵件之前捉腥,請(qǐng)不要進(jìn)行部署
提交問題不困難氓拼,這里不截圖講了,如果使用域名抵碟,需要配置解析到問題URL桃漾,將會(huì)自動(dòng)驗(yàn)證,正常情況下拟逮,白天提交撬统,第二天早上就可以收到回復(fù)了。
配置身份驗(yàn)證
打開maven
setting.xml
文件配置加入如下內(nèi)容
<settings>
<servers>
<server>
<id>ossrh</id>
<username>用戶名</username>
<password>密碼</password>
</server>
</servers>
</settings>
pom配置
由于OSSRH
始終運(yùn)行最新版本的Sonatype Nexus Repository Manager
唱歧,因此最好使用Nexus Staging Maven
插件的最新版本宪摧。
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://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://oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
...
</plugins>
</build>
或者,如果想使用Maven
部署插件(默認(rèn))颅崩,則需要添加完整的distributionManagement
几于。
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
推薦使用nexus-staging-maven-plugin
發(fā)布
注:settings.xml server元素中的id元素與snapshotRepositoryand 元素中的repository元素以及serverIdNexus Staging Maven插件的配置如何相同
發(fā)布
如果版本是發(fā)行版(不要以-SNAPSHOT結(jié)尾),執(zhí)行deploy就可以了沿后。
mvn clean deploy