如何推送我的項目至Maven中央倉庫

1. 開篇

前段時間使用Gitee倉庫搭建了一個Maven私有倉庫,將一些開源包放到上面去,感受使用起來仍是不太方便,最近就折騰將這些包提交到Maven的中央倉庫中。項目第一次提交Maven仍是挺麻煩的,因此寫個文章Mark一下。java

2. 操做步驟

2.1. 提交申請

註冊一個sonatype.org賬號,登錄並提交一個issue,沒錯,就是提交一個issue,具體可參考以下: image.png image.pnggit

其中:spring

  • 問題類型:必定要選New Project
  • 概要:填項目名稱;
  • 描述:可不填;
  • Group Id:填寫你的項目ID,需注意的是這個Group Id對應的域名須要是你持有的,後續會驗證這項;
  • Project URL:就是項目主頁地址;
  • SCM url:就是Git倉庫地址;
  • username:填寫你在sonatype JIRA的用戶名,也能夠填寫別人的,這個用戶名用於推送項目,因此要注意。
  • Already Synced to Central:是指你是否準備好提交到中央倉庫了,應該是給官方人員判斷是否須要優先處理。

2.2. 配置項目

2.2.1. 配置settings.xml

在Maven的settings.xml文件中增長<server>配置,配置你sonatype的帳號密碼,參考以下:apache

<servers>
        <server>
            <id>sonatype-nexus-snapshots</id>
            <username>demo</username>
            <password>******</password>
        </server>
        <server>
            <id>sonatype-nexus-staging</id>
            <username>demo</username>
            <password>******</password>
        </server>
        
    </servers>

2.2.2. 配置pom.xml

  • 增長licensescmdeveloper信息。
<licenses>
        <license>
            <name>The Apache Software License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
            <distribution>repo</distribution>
        </license>
    </licenses>
    <scm>
        <tag>master</tag>
        <url>git@gitee.com:centy/xxl-job-spring-boot-starter.git</url>
        <connection>scm:git:git@gitee.com:centy/xxl-job-spring-boot-starter.git</connection>
        <developerConnection>scm:git:git@gitee.com:centy/xxl-job-spring-boot-starter.git</developerConnection>
    </scm>
    <developers>
        <developer>
            <name>centychen</name>
            <email>292462859@qq.com</email>
        </developer>
    </developers>
  • 增長release的profile配置,注意:distributionManagement.snapshotRepositorydistributionManagement.repository的id需與settings.xml中對應的server記錄ID一致;distributionManagement的url根據官方反饋的url修改。
<profiles>
        <profile>
            <id>release</id>
            <build>
                <plugins>
                    <!-- Source -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <version>3.0.1</version>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>jar-no-fork</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <!-- Javadoc -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <version>3.1.0</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>
                    <!--Compiler-->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>3.8.0</version>
                        <configuration>
                            <source>1.8</source>
                            <target>1.8</target>
                            <fork>true</fork>
                            <verbose>true</verbose>
                            <encoding>UTF-8</encoding>
                            <showWarnings>false</showWarnings>
                        </configuration>
                    </plugin>
                    <!--Release-->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-release-plugin</artifactId>
                        <version>2.5.3</version>
                    </plugin>
                </plugins>
            </build>
            <distributionManagement>
                <snapshotRepository>
                    <id>sonatype-nexus-snapshots</id>
                    <name>Sonatype Nexus Snapshots</name>
                    <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
                </snapshotRepository>
                <repository>
                    <id>sonatype-nexus-staging</id>
                    <name>Nexus Release Repository</name>
                    <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
                </repository>
            </distributionManagement>
        </profile>
    </profiles>

2.3. 安裝及配置PGP

  • Mac安裝PGP,我是經過brew安裝的,使用命令brew install gpg執行安裝;
  • 使用命令gpg --gen-key生成公私鑰,按照提示信息一步步操做,須要記住加密使用的Passphrase,下面步驟需使用;
  • 上傳公鑰至公鑰服務器,可經過gpg --list-keys查看公鑰ID,經過一下命令上傳:
gpg --send-keys [公鑰ID] --keyserver hkp://keyserver.ubuntu.com:11371

2.4. 構建並部署

2.4.1. 構建SNAPSHOT版本

  • 版本號修改成***-SNAPSHOT格式,如1.0.0-SNAPSHOT
  • 執行如下命令開始構建:
mvn clean deploy -P release -Dmaven.test.skip=true

2.4.2. 構建RELEASE版本

  • 版本號修改成***-RELEASE或者無後綴格式,如1.0.0-RELEASE1.0.0
  • 構建並Deploy
mvn clean deploy -P release -Dmaven.test.skip=true
  • Deploy的時候會彈出一個輸入Passphrase的頁面,輸入剛纔生成pgp公私鑰使用的密碼。 image.pngapp

  • 登錄https://oss.sonatype.org/,點擊左側Staging Repositories,輸入你的group id查找,可看到deploy記錄: image.pngmaven

  • 選中Deploy記錄點擊CloseConfirm,刷新後會發現記錄狀態已經變成Closedspring-boot

  • 再選中記錄點擊ReleaseConfirm完成發佈,發佈完成後須要等待中央倉庫同步,我是等了1個多小時才能在中央倉庫搜索出來。ui

3. 可能踩到的坑

3.1. gpg: signing failed: Inappropriate ioctl for device

使用mvn clean deploy命令構建時,可能會報gpg: signing failed: Inappropriate ioctl for device,是由於沒法彈出Passphrase頁面,須要在系統環境變量中增長export GPG_TTY=$(tty)

3.2. Access denied to staging repository

若是Deploy的時候報 Access denied to staging repository...等錯誤,恭喜你,你的賬號權限有問題,須要再提一個issue處理該問題,可參考我提的issue

3.3. 在Staging Repositories中執行Close操做不成功,狀態依然是Open。

應該是執行close操做的數據校驗有問題,好比pom.xml信息缺失等,我第一次提交的時候就沒有在pom.xml中配置project name,校驗就沒有經過。留意頁面下方Activity中的錯誤信息便可。

相關文章
相關標籤/搜索