用了这么久的maven
,第一次向中央仓库贡献代码,本编博客作为一次记录。
首先我们需要访问:https://issues.sonatype.org/secure/Signup!default.jspa注册一个帐号,后面与工作人员沟通都需要在这里完成。
注册的用户名密钥要记住,注册的邮箱一定是常用的有效邮箱,后面会通过该邮箱进行沟通
注册完成后登录系统,我们需要创建一个Issue
这里需要注意的是,有红色星号的是必填项,其中:
字段 | 说明 |
---|---|
Summary | 项目说明 |
Group Id | pom.xml中的groupId的值,要对应 |
Project URL | 项目地址,使用github或者个人主页都可以 |
SCM url | 源码位置,可以使用github,如:https://github.com/sonatype/nexus-oss.git |
填写完成后,需要等待Issue
审批,如果是白天操作的话,就不要等着了,因为时差,工作人员晚上才上班,这里需要注意的是如果groupId
用的是个人域名,工作人员会询问是否为自己的域名,以下是我的实际申请截图。
然后工作人员让我发送一封邮件给指定的邮箱账户来验证服务器,需要使用服务器的邮箱发送邮件,按照要求操作就好了。审核通过后会有这样的回复
完成上面的操作,第一步骤就完成了,接下来进行第二阶段,我们需要使用GPG
生成密钥对,这里使用的是2.3.4版本,安装完成后,我们需要生成并上传密钥。
1、生成公钥私钥:gpg --gen-key
然后按照提示,输入用户名、邮箱等,最后重复两次输入Passphase(这个在发布的时候需要,在此牢记)
2、查看公钥私钥:gpg --list-keys
------------------------------------------------
pub 2048R/311E2A88 2018-07-18
uid [ultimate] jianggujin (jianggujin's open source) <[email protected]>
sub 2048R/22BDC15E 2018-07-18
上面仅是例子。
3、发布公钥
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 311E2A88
(这个311E2A88
是上一步查看的公钥ID)
发布完密钥之后,需要修改setting.xml
,添加server
配置
<server>
<id>oss</id>
<username>用户名</username>
<password>密码</password>
</server>
这里的用户名密码就是第一步注册的用户名密码,不要填错了。接下来就需要配置我们的pom.xml
了,贴一个我实际发布的 pom.xml
文件:
<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.jianggujin</groupId>
<artifactId>JHttp</artifactId>
<name>JHttp</name>
<description>HTTP请求工具</description>
<version>1.0.0</version>
<url>http://www.jianggujin.com</url>
<inceptionYear>2018</inceptionYear>
<issueManagement>
<system>GitHub</system>
<url>http://github.com/jianggujin/JHttp/issues</url>
</issueManagement>
<licenses>
<license>
<name>Apache 2</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
<comments>A business-friendly OSS license</comments>
</license>
</licenses>
<scm>
<url>https://github.com/jianggujin/JHttp</url>
<connection>scm:git:https://github.com/jianggujin/JHttp.git</connection>
</scm>
<organization>
<name>Personal Developer</name>
<url>http://www.jianggujin.com</url>
</organization>
<distributionManagement>
<snapshotRepository>
<id>oss</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>oss</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<jdk.version>1.6</jdk.version>
<!-- build -->
<junit.version>4.12</junit.version>
</properties>
<developers>
<developer>
<name>蒋固金</name>
<url>http://www.jianggujin.com</url>
<email>[email protected]</email>
</developer>
</developers>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<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>
<configuration>
<attach>true</attach>
</configuration>
</plugin>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.3</version>
<executions>
<execution>
<id>attach-javadoc</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
<configuration>
<show>public</show>
<charset>UTF-8</charset>
<encoding>UTF-8</encoding>
<docencoding>UTF-8</docencoding>
<links>
<link>http://docs.oracle.com/javase/6/docs/api</link>
</links>
</configuration>
</plugin>
<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>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.7</version>
<extensions>true</extensions>
<configuration>
<serverId>oss</serverId>
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
</plugins>
</build>
</project>
因为发布到maven
,需要包含编译后的包、源码与文档,所以相应的插件不能少,这里需要注意的是nexus-staging-maven-plugin
,使用该插件可以自动帮我们完成发布后的后续操作,比较方便。如果不使用该插件,需要进入https://oss.sonatype.org并登陆,会在左侧有个staging Repositories
点击进入,在右侧面板找到你的构件,状态应该是open
,要将其置为closed
,点击上方的close
按钮即可(close的时候可能会遇到一些问题,最常见的就是group id
与你提交的不符,一般修改group id
重新上传后即可),close
成功后点击release
。
配置完成后执行mvn clean deploy
发布构建,一切完成后回到之前创建的Issue
,回复工作人员已经发布,我回复的内容为:Hi, the component already uploaded, and release it at the same time
,工作人员确认后等待发布的构件同步就可以了。