發(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/