上傳本地jar包到maven中央倉庫

前言

  1. 本次目的:將jar包上傳到maven遠程中央倉庫上
  2. 做用:在Java - maven項目中可在pom文件中引入相應jar包依賴
  3. 問題:maven不支持直接上傳jar包
  4. 解決:將jar包部署到第三方Maven倉庫(如:sonatype ossrh倉庫)中,以後再將jar包同步更新到Maven中央倉庫中
  5. Sonatype OSSRH官方介紹地址central.sonatype.org/pages/ossrh…
  6. 中央組件要求central.sonatype.org/pages/requi…
  7. Maven部署到OSSRH參考配置文檔central.sonatype.org/pages/apach…

1、註冊sonatype帳號:【申請上傳資格】

issues.sonatype.org/secure/Sign… php

在這裏插入圖片描述
以下注冊成功!
在這裏插入圖片描述

2、登陸

issues.sonatype.org/secure/Dash… html

在這裏插入圖片描述
登陸成功進來以後可選擇本身喜歡的語言顯示~
在這裏插入圖片描述
接下來的就是建立頭像等等了,這裏很少說

進來以後以下: java

在這裏插入圖片描述

3、新建issue

issues.sonatype.org/secure/Crea…git

My issue : issues.sonatype.org/browse/OSSR…github

在這裏插入圖片描述
建立以後以下,等待審覈...

Status狀態從OPEN變成RESOLVED表示成功!apache

在這裏插入圖片描述
小編第一次建立後審覈失敗,現現在改爲以下,再看看是否成功吧~
在這裏插入圖片描述
在這裏插入圖片描述
第二次審覈失敗,修改以下:
在這裏插入圖片描述
在這裏插入圖片描述
第三次審覈失敗,修改以下:
在這裏插入圖片描述
在這裏插入圖片描述
在第三次修改後,沒有任何回覆,這時我就從新建立了一個issue,以下審覈成功,此次審覈速度就很是快了,可能也就幾分鐘事後就經過了,以下Status狀態從OPEN變成了RESOLVED ~ issues.sonatype.org/secure/Crea…
在這裏插入圖片描述

新建issue遇坑問題總結:

  1. 這裏能夠採用github做爲Group Id、Project URL、SCM url
  2. 如何使用github的信息呢? ① Group Id:填寫com.github.xx -> xx爲github用戶名 ② Project URL:剛建立時隨便填寫一個github中已有的一個開放倉庫名,建立後修改成與之對應的名稱,以下:
    在這裏插入圖片描述
    ③ SCM url:填寫github中的倉庫名.git
  3. 用戶名設置不要太長,由於小編以前填寫名稱過長,被要求太重新建立新帳號

4、構件倉庫上傳jar包:oss.sonatype.org/#welcome

將jar包上傳到這裏,Release 以後就會同步到maven中央倉庫ubuntu

一、本地安裝gpg,並使用gpg生成密鑰對

注:發佈到Maven倉庫中的全部文件都要使用GPG簽名,以保障完整性。安全

① 下載安裝gpg4win

Windows系統下載地址: www.gpg4win.org/download.ht…bash

安裝很簡單,以下: 服務器

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
由於咱們只須要GnuPG,因此其它的能夠沒必要勾選
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
cmd執行以下命令驗證是否安裝成功:

gpg --version
複製代碼

在這裏插入圖片描述

② 使用gpg生成密鑰對

cmd執行以下命令:

gpg --gen-key
複製代碼

【注】輸入的 Passphrase 值至關於密鑰的密碼,後面會用到!!

在這裏插入圖片描述
若是ok以後出現以下界面,是提示密碼安全度不高,須要包含至少一個數字或特殊字符~ 從新輸入一下便可
在這裏插入圖片描述
在這裏插入圖片描述
ok以後,咱們的密鑰對就設置好了 【注】,下圖中的 448854BCFF61E7F7 至關於咱們生成的key,後面要用到!!
在這裏插入圖片描述

③ 上傳GPG公鑰

目的:將公鑰上傳到公共的密鑰服務器(也就是上傳到第三方的key驗證庫)讓其餘人能夠經過公鑰來驗證jar包的完整性

查看公鑰

gpg --list-keys
複製代碼

其中3408AAAFEE3AB847DE82602B448854BCFF61E7F7爲公鑰ID

在這裏插入圖片描述
將公鑰或key發佈到 PGP 密鑰服務器(注:這裏我暫時未發現有何區別~)

gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 公鑰ID或上面提到的key
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 公鑰ID或上面提到的key
複製代碼

查詢公鑰是否發佈成功

gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 公鑰ID或上面提到的key
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 公鑰ID或上面提到的key
複製代碼

二、在maven的setting.xml配置文件中添加以下節點信息:

<servers>
  <!-- 上傳jar包到maven中央倉庫配置start -->
  <server>
      <id>ossrh</id>
      <username>Sonatype帳號</username>
      <password>Sonatype密碼</password>
  </server>
  <!-- 上傳jar包到maven中央倉庫配置end -->
</servers>
複製代碼

三、配置項目的pom.xml文件

可參考Sonatype提供的要求: central.sonatype.org/pages/requi… Sonatype提供的pom文件demo:github.com/simpligilit…

個人pom文件配置以下:github.com/zhengqingya…

<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>com.github.zhengqing</groupId>
	<artifactId>OSSRH-49683</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>${project.groupId}:${project.artifactId}</name>
	<description>The test uploads the jar to the maven central repository</description>
	<url>https://github.com/zhengqingya/OSSRH-49683</url>

	<properties>
		<java.version>1.8</java.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<maven.compiler.source>${java.version}</maven.compiler.source>
		<maven.compiler.target>${java.version}</maven.compiler.target>
		<maven.deploy.skip>true</maven.deploy.skip>
	</properties>

	<dependencies>
		<!-- ... -->
	</dependencies>

	<!-- 許可證信息 -->
	<licenses>
		<!-- Apache許可證 -->
		<license>
			<name>The Apache Software License, Version 2.0</name>
			<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
		</license>
		<!-- MIT許可證 -->
		<!-- <license> <name>MIT License</name> <url>http://www.opensource.org/licenses/mit-license.php</url> </license>-->
	</licenses>
	<!-- SCM信息 -> git在github上託管 -->
	<scm>
		<connection>scm:git:git://github.com/zhengqingya/OSSRH-49683.git</connection>
		<developerConnection>scm:git:ssh://github.com/zhengqingya/OSSRH-49683.git</developerConnection>
		<url>https://github.com/zhengqingya/OSSRH-49683/tree/master</url>
	</scm>
	<!-- 開發者信息 -->
	<developers>
		<developer>
			<name>zhengqingya</name>
			<email>960869719@qq.com</email>
			<url>https://github.com/zhengqingya</url>
		</developer>
	</developers>

	<!-- 使用我的資料:因爲生成javadoc和源jar以及使用GPG簽署組件是一個至關耗時的過程,所以這些執行一般與正常的構建配置隔離並移動到配置文件中。而後,在經過激活配置文件執行部署時,將使用此配置文件。 -->
	<profiles>
		<profile>
			<id>ossrh</id>
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
			<build>
				<plugins>
					<!-- 要生成Javadoc和Source jar文件,您必須配置javadoc和源Maven插件 -->
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-source-plugin</artifactId>
						<version>2.2.1</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>
					</plugin>
					<!-- 必須配置GPG插件用於使用如下配置對組件進行簽名 -->
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-gpg-plugin</artifactId>
						<version>1.5</version>
						<executions>
							<execution>
								<id>sign-artifacts</id>
								<phase>verify</phase>
								<goals>
									<goal>sign</goal>
								</goals>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
			<!-- 【注】snapshotRepository 與 repository 中的 id 必定要與 setting.xml 中 server 的 id 保持一致! -->
			<distributionManagement>
				<snapshotRepository>
					<id>ossrh</id>
					<url>https://oss.sonatype.org/content/repositories/snapshots</url>
				</snapshotRepository>
				<repository>
					<id>ossrh</id>
					<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
				</repository>
			</distributionManagement>
		</profile>
	</profiles>

</project>
複製代碼

四、部署和發佈Jar包

方法一: 命令

部署命令以下:

mvn clean deploy
複製代碼

當咱們的項目中含有多個模塊時,咱們可使用 -projects 來指定部署哪個模塊

舉例:

  1. 部署一個模塊以下: 【demo和demo2爲模塊名】
    mvn clean deploy -projects demo
    複製代碼
  2. 部署兩個模塊以下:
    mvn clean deploy -projects demo,demo2
    複製代碼
方法二: idea圖形化 -> 直接雙擊deploy

在這裏插入圖片描述

【注】第一次執行時須要輸入以前設置的passphrase密碼 ~

若是不想出現此,也可在一開始直接執行以下命令: mvn clean deploy -P sonatype-oss-release -Darguments="gpg.passphrase=設置gpg密鑰時輸入的Passphrase"

在這裏插入圖片描述

上傳所遇問題

若是出現上傳問題,能夠嘗試將 oss.sonatype.org/#stagingRep… 上以前上傳的錯誤項目所有刪除【選中點擊Drop便可刪除】,而後再次上傳~

在這裏插入圖片描述

最後成功以下:

在這裏插入圖片描述
本地倉庫:
在這裏插入圖片描述

5、同步到maven中央倉庫

oss.sonatype.org/#stagingRep… 中勾選本身上傳的構件(咱們的jar包上傳到這裏哦)點擊Close而後再Release,Release以後就會同步到maven中央倉庫

在這裏插入圖片描述

最終到 maven中央倉庫 中就能夠搜索到了

相關文章
相關標籤/搜索