JAVA开源软件开发必备技能

发布构建到maven中央仓库的方法和详细步骤

  • sonatype介绍
  • 向sonatype提交申请
  • 配置maven
  • GPG签名
  • 发布版本
  • 通知sonatype

sonatype介绍

Maven项目托管在Apache上的,但是中央仓库不是Apache的资源,中央仓库是由Sonatype出资维护的。目前来说,http://repo1.maven.org/maven2/是真正的Maven中央仓库的地址。Nexus仓库就是Sonatype开发的,搭建maven私服普遍采用Nexus。

向sonatype提交申请

  • 首先需要注册sonatype,
  • 创建issue,点击Create,选择New Project 

  • 提交申请,主要填写项目简介,groupId,projectUrl,scmUrl。这里的groupId必须是自己拥有的域名,或者采用com.github.{user} 
  • 提交申请后,sonatype的工作人员会进行审核,通过后issue的状态变为RESOLVED 

配置maven

  • 项目基本信息配置,主要包括名称,描述,github地址,开发者信息等


    • 
    1. <name>Gecco</name>
    2. <description>Easy to use lightweight web crawler</description>
    3. <url>https://github.com/xtuhcy/gecco</url>
    4. <scm>
    5. <connection>scm:git:https://github.com/xtuhcy/gecco.git</connection>
    6. <developerConnection>scm:git:https://github.com/xtuhcy/gecco.git</developerConnection>
    7. <url>https://github.com/xtuhcy/gecco</url>
    8. <tag>v1.0.0</tag>
    9. </scm>
    10. <developers>
    11. <developer>
    12. <name>xtuhcy</name>
    13. <email>xtuhcy@163.com</email>
    14. <organization>geccocrawler</organization>
    15. <organizationUrl>http://www.geccocrawler.com</organizationUrl>
    16. </developer>
    17. </developers>
    18. <licenses>
    19. <license>
    20. <name>The MIT License (MIT)</name>
    21. <url>https://raw.githubusercontent.com/xtuhcy/gecco/master/LICENSE</url>
    22. </license>
    23. </licenses>
    • 配置source、javadoc打包和gpg签名。上传maven中央库的构建必须包含源码、javadoc,并且对构件jar、源码jar、javadoc的jar进行gpg签名

    1. <profiles>
    2. <profile>
    3. <id>release</id>
    4. <distributionManagement>
    5. <snapshotRepository>
    6. <id>ossrh</id>
    7. <url>https://oss.sonatype.org/content/repositories/snapshots</url>
    8. </snapshotRepository>
    9. <repository>
    10. <id>ossrh</id>
    11. <url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>
    12. </repository>
    13. </distributionManagement>
    14. <build>
    15. <plugins>
    16. <plugin>
    17. <groupId>org.sonatype.plugins</groupId>
    18. <artifactId>nexus-staging-maven-plugin</artifactId>
    19. <extensions>true</extensions>
    20. <configuration>
    21. <serverId>ossrh</serverId>
    22. <nexusUrl>https://oss.sonatype.org/</nexusUrl>
    23. <autoReleaseAfterClose>true</autoReleaseAfterClose>
    24. </configuration>
    25. </plugin>
    26. <plugin>
    27. <groupId>org.apache.maven.plugins</groupId>
    28. <artifactId>maven-release-plugin</artifactId>
    29. <configuration>
    30. <autoVersionSubmodules>true</autoVersionSubmodules>
    31. <useReleaseProfile>false</useReleaseProfile>
    32. <releaseProfiles>release</releaseProfiles>
    33. <goals>deploy</goals>
    34. </configuration>
    35. </plugin>
    36. <plugin>
    37. <groupId>org.apache.maven.plugins</groupId>
    38. <artifactId>maven-compiler-plugin</artifactId>
    39. <configuration>
    40. <source>1.6</source>
    41. <target>1.6</target>
    42. <encoding>UTF-8</encoding>
    43. </configuration>
    44. </plugin>
    45. <plugin>
    46. <groupId>org.apache.maven.plugins</groupId>
    47. <artifactId>maven-gpg-plugin</artifactId>
    48. <executions>
    49. <execution>
    50. <id>sign-artifacts</id>
    51. <phase>verify</phase>
    52. <goals>
    53. <goal>sign</goal>
    54. </goals>
    55. </execution>
    56. </executions>
    57. </plugin>
    58. <plugin>
    59. <groupId>org.apache.maven.plugins</groupId>
    60. <artifactId>maven-source-plugin</artifactId>
    61. <configuration>
    62. <encoding>UTF-8</encoding>
    63. </configuration>
    64. <executions>
    65. <execution>
    66. <id>attach-sources</id>
    67. <goals>
    68. <goal>jar-no-fork</goal>
    69. </goals>
    70. </execution>
    71. </executions>
    72. </plugin>
    73. <plugin>
    74. <groupId>org.apache.maven.plugins</groupId>
    75. <artifactId>maven-javadoc-plugin</artifactId>
    76. <configuration>
    77. <encoding>UTF-8</encoding>
    78. </configuration>
    79. <executions>
    80. <execution>
    81. <id>attach-javadocs</id>
    82. <goals>
    83. <goal>jar</goal>
    84. </goals>
    85. </execution>
    86. </executions>
    87. </plugin>
    88. </plugins>
    89. </build>
    90. </profile>
    91. </profiles>
    • 打包时只需要添加-P release即可执行上述构件jar、源码jar、javadoc的jar以及签名等一系列操作。如mvn deploy -P release
    • 配置上传账户,修改maven的setting.xml,添加刚才注册的sonatype的账号和密码



    1. <servers>
    2. <server>
    3. <id>ossrh</id>
    4. <username>memory</username>
    5. <password>your password</password>
    6. </server>
    7. </servers>
    • 上述配置完成后还不能成功上传中央库,需要配置gpg签名。生成密钥。

    GPG签名

    • gpg签名的主要目的就是生成公钥、私钥,并将公钥上传到gpg的密钥服务器上,之后上传maven服务器的文件都可以通过该私钥进行数字签名,以保证是您自己上传到maven服务器上的。
    • 第一步,安装gng window下载地址:https://www.gpg4win.org/download.html
    • 第二步,生成密钥 gpg --gen-key 除了用户名和邮箱已经密码,其他均可以默认 生成密钥后,可以通过gpg --list-keys查看 
    • 第三步,上传公钥到gpg服务器 gpg --keyserver hkp://pool.sks-keyservers.net --send-k eys 3E8E57E4 有时不成功,多尝试几次。

    发布版本



      影音先锋电影 http://www.iskdy .com/


    一切准备就绪,发布版本,mvn deploy -P release。编译后在签名是需要提供刚才生成gpg密钥时输入的密码 

    配置Maven中央仓库 发布maven中央仓库_github

     到此,一个构件已经发布到中央库,但是能正式下载还需要sonatype的工作人员审核。

    最后一步通知sonatype

    回到sonatype网站的issue,回复issue,等待审核。审核通过的结果如下: 

    配置Maven中央仓库 发布maven中央仓库_maven_02

     等待2个小时,您就可以在中央库下载自己的jar了。

    这里说明一下自己使用的软件环境:maven3.2.2,eclipse luna