發(fā)布jar包到maven中央倉庫(無個人域名)
一、簡介
1.1 概述
我們通常使用的Jar包漆际,大多都是從鏡像上拉取的志于,也有私人倉庫,也有直接從Maven中央倉庫拉取的装盯,無論從鏡像還是倉庫坷虑,發(fā)布到中央倉庫的jar包,都是可以直接拉取下來的埂奈。所以迄损,當(dāng)我們自己打包了一個jar包之后,打算開源出去裝逼的時候账磺,我們就可以將jar包發(fā)布到sonatype.org芹敌,這個地址看起來不是maven,但是發(fā)布上去之后垮抗,我們在mvnrepository.com和search.maven.org都可以看到自己的jar包了氏捞。
本文按照網(wǎng)上亂七八糟的方式上傳過jar包,經(jīng)過血與淚的洗禮冒版,總結(jié)出了一套最簡單實用的方式液茎。
1.2 本篇重點(diǎn)
本篇先介紹下如何用git的域名來發(fā)布自己的jar包,下一篇介紹下如何用自己的域名來發(fā)布jar包壤玫。
1.3 地址
工單管理地址:https://issues.sonatype.org/secure/Dashboard.jspa
說明:注冊賬號豁护、創(chuàng)建和管理issue哼凯,Jar包的發(fā)布是以解決issue的方式起步的
Jar包上傳地址:https://oss.sonatype.org/#welcome
說明:使用maven提交后的jar包先到這個庫中欲间,可以用maven命令上傳,也可以直接在界面上上傳断部。
二猎贴、開始上傳
2.1 創(chuàng)建工單
創(chuàng)建工單是必須的,也很簡單,在工單管理中提交下jar包相關(guān)信息即可她渴。
首先要注冊賬號达址,如果沒有賬號,需要先注冊一個趁耗,記住用戶名密碼沉唠,后邊要配置到setting.xml中。
點(diǎn)擊Craete,彈出如下窗口:
必填項選擇:
Project:Community Support - Open Source Project Repository Hosting
Issue Type:New Project
Summary:JAR包名稱苛败,如:JpaMapper
Group Id:你懂得满葛,不用多說,如com.github.ffch,如果是個人域名罢屈,填寫個人的groupId嘀韧,如:cn.pomit
Project URL:項目站點(diǎn),如:https://github.com/ffch/jpa-mapper缠捌,如果有項目主頁锄贷,填寫項目主頁,如https://www.pomit.cn/jpa-mapper
SCM url:項目源碼倉庫曼月,如:https://github.com/ffch/jpa-mapper.git
其他內(nèi)容不用填寫谊却,默認(rèn)即可。
創(chuàng)建Issue后哑芹,Sonatype的工作人員審核處理因惭,一般一個工作日以內(nèi),當(dāng)Issue的Status變?yōu)镽ESOLVED后绩衷,就可以進(jìn)行下一步操作了蹦魔。
使用Group Id為com.github.ffch申請過程如下:
2.2 配置Maven
2.2.1 配置setting.xml
setting.xml文件一般在當(dāng)前用戶文件夾的.m2文件夾下。
在servers中增加server配置
<servers>
<server>
<id>sonatype-nexus-snapshots</id>
<username>Sonatype 賬號</username>
<password>Sonatype 密碼</password>
</server>
<server>
<id>sonatype-nexus-staging</id>
<username>Sonatype 賬號</username>
<password>Sonatype 密碼</password>
</server>
</servers>
2.2.2 配置pom.xml
2.2.2.1 搜到的方法
網(wǎng)上的一般說要配置oss-parent咳燕,這樣好處就是很多東西可以省掉勿决。
如:
<parent>
<groupId>org.sonatype.oss</groupId>
<artifactId>oss-parent</artifactId>
<version>7</version>
</parent>
再加上開發(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)配置了一個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
生成咆繁,過程中需要填寫名字、郵箱等顶籽,其他步驟可以使用默認(rèn)值玩般,不過有個叫:Passphase的參數(shù)需要記住,這個相當(dāng)于是是密鑰的密碼礼饱,下一步發(fā)布過程中進(jìn)行簽名操作的時候會用到坏为。
命令執(zhí)行之后究驴,會提示輸入真實姓名和郵箱,之后提示輸入密碼匀伏。
之后會得到pub,上圖中深色部分
將pub上傳到key驗證庫
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=密鑰密碼"
實際操作過程中洒忧,-Darguments="gpg.passphrase=密鑰密碼"不寫會提示輸入密碼,我這里寫了還是提示了够颠。
使用maven命令部署會更好一點(diǎn)熙侍,因為我用eclipse沒部署成功,提示出錯履磨,eclipse是這樣玩的:
這個過程也是很讓人崩潰的核行,特別慢,而且上傳完成之后還是有很多問題蹬耘。下面介紹一種快捷上傳的方式芝雪。
2.5 快捷上傳jar包
使用maven命令上傳多個jar包時,sonatype會自動把項目分割成多個Repository综苔,這樣close的時候就會校驗失敗惩系,因為這個原因,上傳了n次如筛,不得不另辟蹊徑堡牡。
失敗情況如圖,不是asc文件沒有杨刨,而是在第二個Repository中晤柄,close的時候就失敗了:
因此,我們不能用這種方式妖胀,我們可以在頁面上直接上傳:
先drop掉失敗記錄(個人強(qiáng)迫證)芥颈,點(diǎn)擊左側(cè)的staging-upload,選擇自己的pom文件和其他文件上傳
Select Artifact(s) for Upload按鈕點(diǎn)了選擇文件之后赚抡,要點(diǎn)Add Artifact按鈕將文件放置到Artifacts列表框中爬坑。
Description必填,但隨意涂臣。
如圖:
三盾计、Jar入庫
經(jīng)過漫長的等待,jar包可能應(yīng)該已經(jīng)上傳到stagingRepositories了赁遗。
如圖所示署辉,我們可以在右上角的搜索框輸入關(guān)鍵字查找我們的jar包。多個jar包的上傳岩四,會出現(xiàn)多個Repository哭尝,點(diǎn)擊相應(yīng)的Repositories,可以查看內(nèi)容炫乓。
圖示:
3.1 校驗Jar包
選擇列表中的Repositories刚夺,多個Repositories要同時選定献丑,此時的構(gòu)件狀態(tài)為open末捣,點(diǎn)擊上方的close–>Confirm侠姑。
在下邊的Activity選項卡中查看狀態(tài),當(dāng)狀態(tài)變成closed后箩做,執(zhí)行Release–>Confirm莽红,并在下邊的Activity選項卡中查看狀態(tài)。
成功后構(gòu)件自動刪除邦邦,一小段時間(約1-2個小時)后即可同步到maven的中央倉庫安吁。
下一篇介紹下如何用自己的域名來發(fā)布jar包。步驟類似燃辖,前面部分略有不同鬼店,需要配置其他東西。
四黔龟、 JpaMapper
JpaMapper官方地址:
https://www.pomit.cn/jpa-mapper/