發布開源項目到Maven中央倉庫


一、創建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、下載

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的中央倉庫中搜索到自己發布的構件,看是否存在
  • 至此就結束了

七、升級控件

當修改完成之后,直接走 第六 步驟進行構建發布即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM