摘要
一、将项目推送到远程仓库,如 Github
或者Gitee
二、注册 Sonatype
账户
进入 https://central.sonatype.com 注册一个账号,邮箱要真实。
三、登录 Sonatype 创建Namespace
进入 Namespace 模块,然后点击 Add Namespace 按钮,Namespace 具有唯一性
发布前一定要创建Namespace
,实际上就是项目的Group Id
,因为要进行验证,所以这里不能随便填写,你可以配置为你拥有的域名,比如我的域名是hanqunfeng.com
,这里就填写com.hanqunfeng
。域名的验证方法是配置DNS TXT记录。
如果你没有域名,也可以使用Github的域名,比如我的Github用户名是hanqunfeng
,则这里可以配置为io.github.hanqunfeng
。Github的验证方式是根据给定个名称创建一个public repository。
四、发布
1.准备签名
可以使用工具创建密钥对
需要下载一个签名工具,我是mac电脑,下载的是https://gpgtools.org 。
安装后点击新建,按照提示创建一个密钥对即可,注意高级选项里有个过期时间,默认是3年
。创建好后会主动提示你是否将公钥发布到key server
,点击Upload Public key
即可。也可以在创建后的证书列表页面邮件选择证书
–>Send Public Key To Key Server
。
导出证书时,勾选密码并设置密码就是私钥和公钥证书,不勾选密码就是公钥,看生成文件的名称就可以,公开就是公钥,私密就是私钥,格式都是asc
,其实就是字符串
,可以用记事本打开查看。
如果windows系统,可以下载https://www.gpg4win.org/ ,使用方式差不多,最后点击“将公钥上传的目录服务”。
公钥发布到key server
后要稍微等一会,大约10分钟
吧,因为key server
有多个,同步需要一些时间。
记住你创建密钥对时的密码,发布项目时要使用。
2.settings.xml
配置 maven
的 settings.xml
文件,设置一个 server
,里面添加 User Token
。
登录https://central.sonatype.com 后点击右上角的用户名称–> View Account --> Generate User Token
1 2 3 4 5 6 7 8 9 10 11 <settings > [...] <servers > [...] <server > <id > maven-central</id > <username > username</username > <password > token</password > </server > </servers > </settings >
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 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 <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 > io.github.hanqunfeng</groupId > <artifactId > aws-s3-v2-tools</artifactId > <version > 1.0.1</version > <packaging > jar</packaging > <name > aws-s3-v2-tools</name > <description > AWS S3 Tools. </description > <url > https://blog.hanqunfeng.com</url > <licenses > <license > <name > The Apache License, Version 2.0</name > <url > http://www.apache.org/licenses/LICENSE-2.0.txt</url > </license > </licenses > <developers > <developer > <id > hanqf</id > <name > hanqunfeng</name > <email > qunfeng_han@126.com</email > </developer > </developers > <scm > <connection > scm:git:https://github.com/hanqunfeng/aws-s3-v2-tools.git </connection > <developerConnection > scm:git:https://github.com:hanqunfeng/aws-s3-v2-tools.git </developerConnection > <url > https://github.com/hanqunfeng/aws-s3-v2-tools</url > </scm > <properties > <java.version > 1.8</java.version > <maven.compiler.source > 8</maven.compiler.source > <maven.compiler.target > 8</maven.compiler.target > <project.build.sourceEncoding > UTF-8</project.build.sourceEncoding > </properties > <dependencyManagement > <dependencies > <dependency > <groupId > software.amazon.awssdk</groupId > <artifactId > bom</artifactId > <version > 2.23.10</version > <type > pom</type > <scope > import</scope > </dependency > </dependencies > </dependencyManagement > <dependencies > <dependency > <groupId > software.amazon.awssdk</groupId > <artifactId > s3</artifactId > </dependency > <dependency > <groupId > software.amazon.awssdk</groupId > <artifactId > apache-client</artifactId > <exclusions > <exclusion > <groupId > commons-logging</groupId > <artifactId > commons-logging</artifactId > </exclusion > </exclusions > </dependency > <dependency > <groupId > software.amazon.awssdk</groupId > <artifactId > s3-transfer-manager</artifactId > </dependency > <dependency > <groupId > software.amazon.awssdk</groupId > <artifactId > aws-crt-client</artifactId > </dependency > <dependency > <groupId > org.projectlombok</groupId > <artifactId > lombok</artifactId > <optional > true</optional > <version > 1.18.32</version > </dependency > <dependency > <groupId > org.springframework</groupId > <artifactId > spring-core</artifactId > <version > 5.3.29</version > </dependency > </dependencies > <build > <plugins > <plugin > <groupId > org.apache.maven.plugins</groupId > <artifactId > maven-compiler-plugin</artifactId > <version > 3.8.1</version > <configuration > <source > ${java.version}</source > <target > ${java.version}</target > </configuration > </plugin > <plugin > <groupId > org.apache.maven.plugins</groupId > <artifactId > maven-source-plugin</artifactId > <version > 3.2.1</version > <executions > <execution > <id > attach-source</id > <phase > verify</phase > <goals > <goal > jar</goal > </goals > </execution > </executions > </plugin > <plugin > <groupId > org.apache.maven.plugins</groupId > <artifactId > maven-javadoc-plugin</artifactId > <version > 3.2.0</version > <executions > <execution > <id > attach-javadoc</id > <phase > verify</phase > <goals > <goal > jar</goal > <goal > javadoc</goal > </goals > <configuration > <additionalOptions > -Xdoclint:none</additionalOptions > <additionalJOption > -Xdoclint:none</additionalJOption > </configuration > </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 > <plugin > <groupId > org.sonatype.central</groupId > <artifactId > central-publishing-maven-plugin</artifactId > <version > 0.5.0</version > <extensions > true</extensions > <configuration > <publishingServerId > maven-central</publishingServerId > <autoPublish > true</autoPublish > <waitUntil > published</waitUntil > <deploymentName > ${project.groupId}:${project.artifactId}:${project.version}</deploymentName > </configuration > </plugin > <plugin > <groupId > org.apache.maven.plugins</groupId > <artifactId > maven-release-plugin</artifactId > <version > 2.5.3</version > </plugin > </plugins > </build > <distributionManagement > </distributionManagement > </project >
1 2 3 mvn clean package # 完成打包和测试 mvn clean verify # 完成源码打包和javadoc打包,同时完成签名 mvn clean deploy # 完成本地部署和maven中央仓库部署
4.1 执行过程中会提示你输入创建密钥对时的密码,如果不想人工参与,也可以使用如下方式(参考:http://maven.apache.org/plugins/maven-gpg-plugin/usage.html)
a.在执行命令时指定密码:
1 mvn clean deploy -Dgpg.passphrase=thephrase
b.setting.xml中创建一个server
1 2 3 4 5 6 7 8 9 10 <settings > [...] <servers > [...] <server > <id > gpg.passphrase</id > <passphrase > clear or encrypted text</passphrase > </server > </servers > </settings >