详细介绍把Mavne项目上传到Maven中央仓库:https://mvnrepository.com ,上传完后可以在中央仓库搜索到你的项目。 首次上传到中央仓库还是挺繁琐的,大约需要一天多时间。
注册JIRA账号;
JIRA创建问题,用来申请发布到Nexus私有仓库;
安装并配置gpg;
配置全局Maven和项目Maven;
上传到Nexus仓库;
发布到中央仓库。
注册JIRA账号 注册地址:https://issues.sonatype.org/secure/Signup!default.jspa
创建问题 通过在JIRA上创建Issue来申请发布新的jar包,Sonatype的工作人员会进行审核,审核不算严格,一般按照要求填写不会有问题。 创建问题链接:https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134
必须填写的项:
概要 : Maven项目的简介
Group Id :项目组织唯一的标识符 一般是域名,可以用Github公用域名或者用自己拥有的域名。
Github公用域名:com.github
;
自己的域名:[域名反写]
,例如我的域名是juhewo.org
,反写后org.juhewu
。 如果是自己的域名,Sonatype的工作人员会验证该域名是不是真的属于你,见下一步骤。
Project URL :输入项目地址;
SCM url :代码地址。
提示 :一个Group Id创建一个Issue就可以。
确认域名(Github域名的跳过此步骤) 提交Issus后会收到一封邮件,邮件里的大致内容是: 询问你该Group Id设置的域名是否为你自己所拥有,如果是就需要证明一下,两种方法:
在域名DNS解析中添加一条类型为TXT的记录:[Issus编号];
设置Github Page当做域名。
使用方式1在阿里云域名DNS解析配置:https://dns.console.aliyun.com/?spm=a2c1d.8251892.nav-right.1.508e5b76D0gJWd#/dns/domainList 。 依次点击或输入解析配置
->添加记录
->记录类型选择:TXT
->记录值输入:OSSRH-57549
。 验证是否设置成功,可以在终端使用nslookup -type=txt juhewu.org
验证,查看返回值中是否有包括OSSRH-57549
的内容;
给Sonatype反馈 在JIRA对应的Issus点击Responsed
,然后等待审核通过,通过后会邮件通知。
安装并配置gpg 发布到Maven仓库中的所有文件都要使用GPG签名,以保障完整性。因此,我们需要在本地安装并配置GPG。
安装gpg Mac可以使用brew安装。其它操作系统安装见gpg官网:https://gpgtools.org
1 2 # 安装gpg brew install gpg
生成公密钥
生成密钥时将需要输入name、email。 需要把公钥和密钥记下来:
密钥的值:gpg: 密钥
与被标记为绝对信任
之间的值;
公钥的值:pub
的下一行。
上传GPG公钥
将公钥上传到公共的密钥服务器,这样其他人才可以通过公钥来验证jar包的完整性。
公钥必须要上传到两个服务器,只上传一个会出现签名错误的问题。
hkp协议默认端口是11371
,写不写都可以。
把公钥换成你的公钥。
1 2 3 # gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 1E7ED4B3F86ECAD38FF9BFE9D7B837A7BC02D4D4 gpg --keyserver hkp://keyserver.ubuntu.com --send-keys 1E7ED4B3F86ECAD38FF9BFE9D7B837A7BC02D4D4
查看公钥是否发布成功 把公钥换成你的公钥。
1 2 3 # 查看公钥是否发布成功 gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 1E7ED4B3F86ECAD38FF9BFE9D7B837A7BC02D4D4 gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 1E7ED4B3F86ECAD38FF9BFE9D7B837A7BC02D4D4
查询本地所有公钥 1 2 # 查询本地所有公钥 gpg --list-keys
配置Maven 配置全局Maven 在Maven配置文件settings.xml
的servers节点配置中央仓库的用户名、密码,就是第一步(注册JIRA账号)注册的用户名、密码,***
替换成你的密码。
1 2 3 4 5 6 7 8 9 10 <server > <id > sonatype_releases</id > <username > duanjw</username > <password > ***</password > </server > <server > <id > sonatype_snapshots</id > <username > duanjw</username > <password > ***</password > </server >
brew安装的Maven,配置文件在:/usr/local/Cellar/maven/3.6.0/libexec/conf/settings.xml
,版本号换成你的版本号。
配置项目Maven 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 <groupId > org.juhewu</groupId > <artifactId > mail-spring-boot-project</artifactId > <version > ${revision}</version > <packaging > pom</packaging > <name > Juhe mail Spring Boot Project</name > <description > 聚合邮件的Spring Boot项目</description > <url > https://github.com/juhewu/mail-spring-boot-project</url > <properties > <maven_javadoc_version > 3.0.1</maven_javadoc_version > <maven_surefire_version > 2.19.1</maven_surefire_version > <revision > 0.0.1</revision > </properties > <organization > <name > juhewu</name > <url > https://github.com/juhewu/</url > </organization > <scm > <url > https://github.com/juhewu/sms-spring-boot-project</url > <connection > scm:git:git:////github.com/juhewu/sms-spring-boot-project.git</connection > <developerConnection > scm:git:ssh://git@//github.com/juhewu/sms-spring-boot-project.git </developerConnection > </scm > <issueManagement > <system > Github</system > <url > https://github.com/juhewu/sms-spring-boot-project/issues</url > </issueManagement > <mailingLists > <mailingList > <name > Development List</name > <subscribe > dev-subscribe@dubbo.apache.org</subscribe > <unsubscribe > dev-unsubscribe@dubbo.apache.org</unsubscribe > <post > dev@juhewu.org</post > </mailingList > </mailingLists > <developers > <developer > <id > duanjiawei</id > <name > 段佳维</name > <email > dev@juhewu.org</email > <url > https://github.com/juhewu</url > </developer > </developers > <licenses > <license > <name > MIT License</name > <url > http://www.opensource.org/licenses/mit-license.php</url > </license > </licenses > <distributionManagement > <repository > <id > sonatype_releases</id > <name > Nexus Release Repository</name > <url > https://oss.sonatype.org/service/local/staging/deploy/maven2</url > </repository > <snapshotRepository > <id > sonatype_snapshots</id > <name > Nexus Snapshot Repository</name > <url > https://oss.sonatype.org/content/repositories/snapshots</url > </snapshotRepository > </distributionManagement > <profiles > <profile > <id > release</id > <activation > <activeByDefault > true</activeByDefault > </activation > <build > <plugins > <plugin > <groupId > org.apache.maven.plugins</groupId > <artifactId > maven-javadoc-plugin</artifactId > <version > 3.2.0</version > <configuration > <aggregate > true</aggregate > </configuration > <executions > <execution > <id > attach-javadocs</id > <goals > <goal > jar</goal > </goals > </execution > </executions > </plugin > <plugin > <artifactId > maven-source-plugin</artifactId > <version > 3.2.1</version > <configuration > <attach > true</attach > </configuration > <executions > <execution > <phase > package</phase > <goals > <goal > jar-no-fork</goal > </goals > </execution > </executions > </plugin > <plugin > <groupId > org.apache.maven.plugins</groupId > <artifactId > maven-gpg-plugin</artifactId > <version > 1.6</version > <executions > <execution > <id > sign-artifacts</id > <phase > verify</phase > <goals > <goal > sign</goal > </goals > </execution > </executions > </plugin > </plugins > </build > </profile > </profiles >
上传到Nexus仓库 gpg.passphrase后边的值就是你的私钥
1 mvn clean deploy -Darguments="gpg.passphrase=4E177C80E2A52BAE"
发布到中央仓库
打开:https://oss.sonatype.org/#stagingRepositories
点击Staging Repositories
,选中你刚上传的项目,点击Close,会执行项目校验,刷新页面在Activity
查看校验进度,所有校验必须全部通过后才能发布到中央仓库。
校验通过后点击Release
即可同步到中央仓库。同步到中央仓库需要时间,可能需要10个小时。
发布后可在https://mvnrepository.com
查看。
日志 生成公私钥 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ➜ ~ gpg --gen-key gpg (GnuPG) 2.2.20; Copyright (C) 2020 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. 注意:使用 “gpg --full-generate-key” 以获得一个功能完整的密钥产生对话框。 GnuPG 需要构建用户标识以辨认您的密钥。 真实姓名: 段佳维 电子邮件地址: 554343346@qq.com 您正在使用‘utf-8’字符集。 您选定了此用户标识: “段佳维 <554343346@qq.com>” 更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? 更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? O 我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘 、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数 发生器有更好的机会获得足够的熵。 我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘 、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数 发生器有更好的机会获得足够的熵。 gpg: /Users/duanjw/.gnupg/trustdb.gpg:建立了信任度数据库 gpg: 密钥 D7B837A7BC02D4D4 被标记为绝对信任 gpg: 目录‘/Users/duanjw/.gnupg/openpgp-revocs.d’已创建 gpg: 吊销证书已被存储为‘/Users/duanjw/.gnupg/openpgp-revocs.d/1E7ED4B3F86ECAD38FF9BFE9D7B837A7BC02D4D4.rev’ 公钥和私钥已经生成并被签名。 pub rsa2048 2020-05-13 [SC] [有效至:2022-05-13] 1E7ED4B3F86ECAD38FF9BFE9D7B837A7BC02D4D4 uid 段佳维 <554343346@qq.com> sub rsa2048 2020-05-13 [E] [有效至:2022-05-13]
上传公私钥 1 2 3 4 ➜ ~ gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 1E7ED4B3F86ECAD38FF9BFE9D7B837A7BC02D4D4 gpg: 正在发送密钥 D7B837A7BC02D4D4 到 hkp://pool.sks-keyservers.net ➜ ~ gpg --keyserver hkp://keyserver.ubuntu.com --send-keys 1E7ED4B3F86ECAD38FF9BFE9D7B837A7BC02D4D4 gpg: 正在发送密钥 D7B837A7BC02D4D4 到 hkp://keyserver.ubuntu.com
查看公私钥 1 2 3 4 5 6 7 8 ➜ ~ gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 1E7ED4B3F86ECAD38FF9BFE9D7B837A7BC02D4D4 gpg: 密钥 D7B837A7BC02D4D4:“段佳维 <554343346@qq.com>” 未改变 gpg: 处理的总数:1 gpg: 未改变:1 ➜ ~ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 1E7ED4B3F86ECAD38FF9BFE9D7B837A7BC02D4D4 gpg: 密钥 D7B837A7BC02D4D4:“段佳维 <554343346@qq.com>” 未改变 gpg: 处理的总数:1 gpg: 未改变:1