發(fā)布jar包到maven中央倉(cāng)庫(kù)(無(wú)個(gè)人域名)

發(fā)布jar包到maven中央倉(cāng)庫(kù)(無(wú)個(gè)人域名)

一、簡(jiǎn)介

1.1 概述

我們通常使用的Jar包,大多都是從鏡像上拉取的,也有私人倉(cāng)庫(kù),也有直接從Maven中央倉(cāng)庫(kù)拉取的,無(wú)論從鏡像還是倉(cāng)庫(kù),發(fā)布到中央倉(cāng)庫(kù)的jar包,都是可以直接拉取下來(lái)的。所以,當(dāng)我們自己打包了一個(gè)jar包之后,打算開(kāi)源出去裝逼的時(shí)候,我們就可以將jar包發(fā)布到sonatype.org,這個(gè)地址看起來(lái)不是maven,但是發(fā)布上去之后,我們?cè)趍vnrepository.com和search.maven.org都可以看到自己的jar包了。

本文按照網(wǎng)上亂七八糟的方式上傳過(guò)jar包,經(jīng)過(guò)血與淚的洗禮,總結(jié)出了一套最簡(jiǎn)單實(shí)用的方式。

1.2 本篇重點(diǎn)

本篇先介紹下如何用git的域名來(lái)發(fā)布自己的jar包,下一篇介紹下如何用自己的域名來(lái)發(fā)布jar包。

1.3 地址

工單管理地址https://issues.sonatype.org/secure/Dashboard.jspa

說(shuō)明:注冊(cè)賬號(hào)、創(chuàng)建和管理issue,Jar包的發(fā)布是以解決issue的方式起步的

Jar包上傳地址https://oss.sonatype.org/#welcome

說(shuō)明:使用maven提交后的jar包先到這個(gè)庫(kù)中,可以用maven命令上傳,也可以直接在界面上上傳。

二、開(kāi)始上傳

2.1 創(chuàng)建工單

創(chuàng)建工單是必須的,也很簡(jiǎn)單,在工單管理中提交下jar包相關(guān)信息即可。

首先要注冊(cè)賬號(hào),如果沒(méi)有賬號(hào),需要先注冊(cè)一個(gè),記住用戶(hù)名密碼,后邊要配置到setting.xml中。

點(diǎn)擊Craete,彈出如下窗口:


在這里插入圖片描述

必填項(xiàng)選擇:

Project:Community Support - Open Source Project Repository Hosting

Issue Type:New Project

Summary:JAR包名稱(chēng),如:JpaMapper

Group Id:你懂得,不用多說(shuō),如com.github.ffch,如果是個(gè)人域名,填寫(xiě)個(gè)人的groupId,如:cn.pomit

Project URL:項(xiàng)目站點(diǎn),如:https://github.com/ffch/jpa-mapper,如果有項(xiàng)目主頁(yè),填寫(xiě)項(xiàng)目主頁(yè),如https://www.pomit.cn/jpa-mapper

SCM url:項(xiàng)目源碼倉(cāng)庫(kù),如:https://github.com/ffch/jpa-mapper.git

其他內(nèi)容不用填寫(xiě),默認(rèn)即可。

創(chuàng)建Issue后,Sonatype的工作人員審核處理,一般一個(gè)工作日以?xún)?nèi),當(dāng)Issue的Status變?yōu)镽ESOLVED后,就可以進(jìn)行下一步操作了。

使用Group Id為com.github.ffch申請(qǐng)過(guò)程如下:

在這里插入圖片描述

2.2 配置Maven

2.2.1 配置setting.xml

setting.xml文件一般在當(dāng)前用戶(hù)文件夾的.m2文件夾下。

在servers中增加server配置

  <servers>
    <server>
      <id>sonatype-nexus-snapshots</id>
      <username>Sonatype 賬號(hào)</username>
      <password>Sonatype 密碼</password>
    </server>
    <server>
      <id>sonatype-nexus-staging</id>
      <username>Sonatype 賬號(hào)</username>
      <password>Sonatype 密碼</password>
    </server>
  </servers>

2.2.2 配置pom.xml

2.2.2.1 搜到的方法

網(wǎng)上的一般說(shuō)要配置oss-parent,這樣好處就是很多東西可以省掉。

如:

<parent>
    <groupId>org.sonatype.oss</groupId>
    <artifactId>oss-parent</artifactId>
    <version>7</version>
</parent>

再加上開(kāi)發(fā)者信息:

<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>chenfufei</name>
        <email>fufeixiaoyu@163.com</email>
        <organization>chenfufei</organization>
        <url>https://github.com/ffch</url>
    </developer>
</developers>

<scm>
    <tag>master</tag>
    <url>git@github.com:ffch/jpa-mapper.git</url>
    <connection>scm:git:git@github.com:ffch/jpa-mapper.git</connection>
    <developerConnection>scm:git:git@github.com:ffch/jpa-mapper.git</developerConnection>
</scm>
2.2.2.2 我的方法

但是如果我們已經(jīng)配置了一個(gè)parent,可能就不想用這種方式了,可以使用以下方式:

<?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>

    <groupId>cn.pomit</groupId>
    <artifactId>jpa-mapper</artifactId>
    <version>2.0</version>
    <packaging>pom</packaging>

    <name>jpa-mapper</name>
    <description>jpa code for mybatis</description>
    <url>https://www.pomit.cn/jpa-mapper</url>
    
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <mybatis.version>3.4.6</mybatis.version>
        <mybatis-spring.version>1.3.2</mybatis-spring.version>
        <mybatis-spring-boot.version>1.3.0</mybatis-spring-boot.version>
        <spring-boot.version>2.0.0.RELEASE</spring-boot.version>
        <jpa.version>1.0</jpa.version>
        <jpa-mapper.version>1.2.2</jpa-mapper.version>
    </properties>
    <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>chenfufei</name>
            <email>fufeixiaoyu@163.com</email>
            <organization>chenfufei</organization>
            <url>https://github.com/ffch</url>
        </developer>
    </developers>

    <scm>
        <tag>master</tag>
        <url>git@github.com:ffch/jpa-mapper.git</url>
        <connection>scm:git:git@github.com:ffch/jpa-mapper.git</connection>
        <developerConnection>scm:git:git@github.com:ffch/jpa-mapper.git</developerConnection>
    </scm>
    <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>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>javax.persistence</groupId>
                <artifactId>persistence-api</artifactId>
                <version>${jpa.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-autoconfigure</artifactId>
                <version>${mybatis-spring-boot.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>${mybatis-spring.version}</version>
            </dependency>
            <dependency>
                <groupId>cn.pomit</groupId>
                <artifactId>jpa-mapper-spring-boot-autoconfigure</artifactId>
                <version>${jpa-mapper.version}</version>
            </dependency>
            <dependency>
                <groupId>cn.pomit</groupId>
                <artifactId>jpa-mapper-spring-boot-starter</artifactId>
                <version>${jpa-mapper.version}</version>
            </dependency>
            <dependency>
                <groupId>cn.pomit</groupId>
                <artifactId>jpa-mapper-core</artifactId>
                <version>${jpa-mapper.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <profiles>
        <profile>
            <id>sonatype-oss-release</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <version>2.1.2</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>
                        <configuration>
                            <aggregate>true</aggregate>
                            <javadocExecutable>${JAVA_HOME}/bin/javadoc</javadocExecutable>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <version>1.1</version>
                        <executions>
                            <execution>
                                <id>sign-artifacts</id>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
    <modules>
        <module>jpa-mapper-spring-boot</module>
        <module>jpa-mapper-core</module>
    </modules>
</project>

2.3 配置gpg-key

如果是使用的windows,可以下載gpg4win,地址:https://www.gpg4win.org/download.html,安裝后在命令行中執(zhí)行

gpg --gen-key

生成,過(guò)程中需要填寫(xiě)名字、郵箱等,其他步驟可以使用默認(rèn)值,不過(guò)有個(gè)叫:Passphase的參數(shù)需要記住,這個(gè)相當(dāng)于是是密鑰的密碼,下一步發(fā)布過(guò)程中進(jìn)行簽名操作的時(shí)候會(huì)用到。

命令執(zhí)行之后,會(huì)提示輸入真實(shí)姓名和郵箱,之后提示輸入密碼。


在這里插入圖片描述

之后會(huì)得到pub,上圖中深色部分
將pub上傳到key驗(yàn)證庫(kù)

gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys EBD22379E4658EFC731753EC27039418A67D0C8F

2.4 上傳Jar包

使用maven命令上傳jar包:

mvn clean deploy -P sonatype-oss-release -Darguments="gpg.passphrase=密鑰密碼"

實(shí)際操作過(guò)程中,-Darguments="gpg.passphrase=密鑰密碼"不寫(xiě)會(huì)提示輸入密碼,我這里寫(xiě)了還是提示了。

使用maven命令部署會(huì)更好一點(diǎn),因?yàn)槲矣胑clipse沒(méi)部署成功,提示出錯(cuò),eclipse是這樣玩的:


在這里插入圖片描述

這個(gè)過(guò)程也是很讓人崩潰的,特別慢,而且上傳完成之后還是有很多問(wèn)題。下面介紹一種快捷上傳的方式。

2.5 快捷上傳jar包

使用maven命令上傳多個(gè)jar包時(shí),sonatype會(huì)自動(dòng)把項(xiàng)目分割成多個(gè)Repository,這樣close的時(shí)候就會(huì)校驗(yàn)失敗,因?yàn)檫@個(gè)原因,上傳了n次,不得不另辟蹊徑。

失敗情況如圖,不是asc文件沒(méi)有,而是在第二個(gè)Repository中,close的時(shí)候就失敗了:


在這里插入圖片描述

因此,我們不能用這種方式,我們可以在頁(yè)面上直接上傳:

先drop掉失敗記錄(個(gè)人強(qiáng)迫證),點(diǎn)擊左側(cè)的staging-upload,選擇自己的pom文件和其他文件上傳

Select Artifact(s) for Upload按鈕點(diǎn)了選擇文件之后,要點(diǎn)Add Artifact按鈕將文件放置到Artifacts列表框中。
Description必填,但隨意。

如圖:

在這里插入圖片描述

三、Jar入庫(kù)

經(jīng)過(guò)漫長(zhǎng)的等待,jar包可能應(yīng)該已經(jīng)上傳到stagingRepositories了。

如圖所示,我們可以在右上角的搜索框輸入關(guān)鍵字查找我們的jar包。多個(gè)jar包的上傳,會(huì)出現(xiàn)多個(gè)Repository,點(diǎn)擊相應(yīng)的Repositories,可以查看內(nèi)容。

圖示:


在這里插入圖片描述

3.1 校驗(yàn)Jar包

選擇列表中的Repositories,多個(gè)Repositories要同時(shí)選定,此時(shí)的構(gòu)件狀態(tài)為open,點(diǎn)擊上方的close–>Confirm。

在下邊的Activity選項(xiàng)卡中查看狀態(tài),當(dāng)狀態(tài)變成closed后,執(zhí)行Release–>Confirm,并在下邊的Activity選項(xiàng)卡中查看狀態(tài)。

成功后構(gòu)件自動(dòng)刪除,一小段時(shí)間(約1-2個(gè)小時(shí))后即可同步到maven的中央倉(cāng)庫(kù)。

下一篇介紹下如何用自己的域名來(lái)發(fā)布jar包。步驟類(lèi)似,前面部分略有不同,需要配置其他東西。

四、 JpaMapper

JpaMapper官方地址:
https://www.pomit.cn/jpa-mapper/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容