一、創建Sonatype賬戶
去這個地址注冊一個賬號:https://issues.sonatype.org/secure/Dashboard.jspa
二、創建一個Issues
登錄Sonatype網站,創建一個Issues,直接點擊Create
按鈕即可,如下圖:
- project
選擇Community Suport - Open Source Project Repository Hosting
- Issue Type
這個選擇New Project
- Summary
選擇項目名 - Description
項目描述 - Group Id
創建Maven項目的時候都有吧,這個是Maven為了區分組的唯一標識 - Project URL
開源項目的地址 - SCM url
開源項目的代碼倉庫地址,比如https://github.com/rstyro/encryption-tools.git
如下示例圖:
三、等待工作人員審核
點擊Issues 下面可看到,剛才創建的Issues,查看狀態,如果狀態變成RESOLVED
即可下一步
如果你的
Group Id
寫的是你自己的域名,可能會有工作人員詢問你是否是你自己的域名
如果是自己的域名,那就去服務器域名解析那,配置一條TXT 記錄即可
如果不是,那建議你還是使用io.github.yourname
或者com.github.yourname
這樣的Group Id
.
四、PGP安裝及生成密鑰
- 一臉懵逼,PGP是什么鬼,干嘛用?
- 目的:是簽名構建用的,為了保證你的構件不被第三方篡改,用於校驗。
1、下載
- 去http://files.gpg4win.org/ 下載選(帶vanilla的)
gpg4win-vanilla-2.3.4.exe
- 快捷下載地址:http://files.gpg4win.org/gpg4win-vanilla-2.3.4.exe
2、安裝
- 傻瓜式安裝,選擇你安裝的位置,一路
next
3、生成密鑰對
- 查詢是否安裝成功
gpg --version
- 生成密鑰對
gpg --gen-key
步驟如下:
- Please select what kind of key you want:
選擇加密方式,默認是 RSA 密鑰對 - RSA keys may be between 1024 and 4096 bits long.
密鑰對的長度 - Please specify how long the key should be valid.
密鑰對的有效期 - Real name
姓名 - Email address
郵箱 - Comment
備注 - Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?
選擇 O ,生成密鑰對 - you need a passphrase to protect your secret key
輸入一個密鑰(secret),要記住哦,后面有用到。
如果有默認值直接回車也可,或者調寫括號內的值,示例圖如下:
最后的打印輸出:
gpg: /c/Users/Administrator/.gnupg/trustdb.gpg: trustdb created
gpg: key C9488ABD marked as ultimately trusted
public and secret key created and signed.
gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
pub 2048R/C9488ABD 2019-04-28
Key fingerprint = E5DB F7AE 7051 D01A B84A 44A5 D2D0 12D2 C948 8ABD
uid rstyro <1006059906@qq.com>
sub 2048R/F6AA50E8 2019-04-28
- 其中
C9488ABD
就是公鑰ID
4、將公鑰發布到 PGP 密鑰服務器
# 公鑰發布PGP 密鑰服務器
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys C9488ABD
# 查詢公鑰是否發布成功
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys C9488ABD
此后,可使用本地的私鑰來對上傳構件進行數字簽名,而下載該構件的用戶可通過上傳的公鑰來驗證簽名,也就是說,大家可以驗證這個構件是否由本人上傳的,因為有可能該構件被壞人給篡改了
五、修改Maven配置文件
1、settings.xml
- 該文件為Maven的配置文件,在Maven安裝目錄下的
conf
文件夾下 - 修改 Maven
settings.xml
文件,中的servers
節點中添加
<server>
<id>oss</id>
<username>Sonatype 用戶名</username>
<password>Sonatype 密碼</password>
</server>
2、pom.xml
修改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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<name>encryption-tools</name>
<description>This is a collection of encryption tools </description>
<url>https://github.com/rstyro/encryption-tools</url>
<groupId>top.lrshuai.encryption</groupId>
<artifactId>encryption-tools</artifactId>
<version>1.0.0</version>
<developers>
<developer>
<name>rstyro</name>
<email>1006059906@qq.com</email>
</developer>
</developers>
<licenses>
<license>
<name>The MIT License</name>
<url>http://opensource.org/licenses/MIT</url>
</license>
</licenses>
<scm>
<connection>scm:git:git@github.com:rstyro/encryption-tools.git</connection>
<developerConnection>scm:git:git@github.com:rstyro/encryption-tools.git</developerConnection>
<url>git@github.com:rstyro/encryption-tools.git</url>
</scm>
<profiles>
<profile>
<!-- 本地開發環境 -->
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
</properties>
<activation>
<!-- 設置默認激活這個配置 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<!--打包環境-->
<id>release</id>
<properties>
<profiles.active>release</profiles.active>
</properties>
<!--定義snapshots庫和releases庫的nexus地址-->
<distributionManagement>
<snapshotRepository>
<!--oss需要對應到settings.xml下的service的id-->
<id>oss</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</snapshotRepository>
<repository>
<id>oss</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
</profile>
<profile>
<!-- 測試環境 -->
<id>beta</id>
<properties>
<profiles.active>beta</profiles.active>
</properties>
</profile>
</profiles>
<build>
<plugins>
<!--編譯插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<!--生產源碼文件插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<attach>true</attach>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!--生產javadoc插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!--gpg加密插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<!-- jdk-->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.12</version>
</dependency>
<!-- bc -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.58</version>
</dependency>
</dependencies>
</project>
pom需要配置的屬性:
- name: 項目名稱。
- description: 項目描述。
- url: 項目地址
- licenses: 開源協議。
- developers: 開發者列表。
- scm: 項目的git地址相關。
- profiles: 配置不同的環境。比如開發環境 測試環境 發布環境。
- groupId: 定義當前maven項目隸屬的實際項目。
- artifactId: 該元素定義實際項目中的一個Maven項目(模塊).
- version: 版本號, 帶SNAPSHOT為快照版本,否則為 release 版本。
- build: 插件。需要加上maven-source-plugin、maven-javadoc-plugin、maven-gpg-plugin三個插件
- dependencies: 依賴的模塊
六、發布控件
1、發布到OSS
進入到開源項目的根目錄運行如下命令:
- 命令
mvn clean deploy -P release -Dgpg.passphrase=你的Passphase
你的Passphase:就是你在第四步,生成密鑰對輸入的secrt
注意:此時上傳的構件並未正式發布到中央倉庫中,只是部署到 OSS 中了,還沒有真正的發布
2、在OSS發布到中央倉庫
- 進入:https://oss.sonatype.org並登陸,點擊左側
Staging Repositories
(暫存的存儲庫) 按鈕 - 狀態應該是
open
,你要將其置為closed
,點擊上方的close
按鈕即可 - 接下來系統會自動驗證有效性,如果你的Group Id和pom.xml沒有錯誤,狀態會自動變成closed
- 如果成功變成Closed 就可以發布了,點擊
Release
進行發布,ok
如果有問題,會在下面提示你那里有問題,加入有問題你可以點擊
drop
按鈕刪掉這個構件,然后重新發布
3、通知 Sonatype 構件已成功發布
- 在comment中回復你已經成功發布,比如:
My repository had released!
- 在Issue下面回復一條“構件已成功發布”的評論,這是為了通知 Sonatype 的工作人員為需要發布的構件做審批,發布后會關閉該Issue。
4、等待審批
- 當審批通過后,將會收到郵件通知。然后去 maven的中央倉庫中搜索到自己發布的構件,看是否存在
- 至此就結束了
七、升級控件
當修改完成之后,直接走 第六
步驟進行構建發布即可。