记一次发布项目到Maven

用了这么久的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,工作人员确认后等待发布的构件同步就可以了。

猜你喜欢

转载自blog.csdn.net/jianggujin/article/details/81173837