• 如何将自己的代码发布到Maven中央仓库?


    去年在公司做工作流相关业务时,当时使用flowable做引擎,中途涉及到一些业务上的需求,自己整理了一些代码,考虑到开源精神,当时就想着将于公司业务无关的代码抽离出来,放到Maven中央仓库中,以供别人学习借鉴,跟着各路大神的帖子折腾了不少时间,一路曲折最终发布到仓库中,地址在此 https://mvnrepository.com/artifact/com.github.songyz0310/flowable-lang 需要的可以使用,我会不定期更新。回到本帖主题,本篇不涉及此工具包,主要说下关于Maven发布的步骤和心得。最近心血来潮,希望把这几年的java相关的东西整理下,暂定项目集 java-toolkits 。

    第一步,注册GitHub的账户

    地址:https://github.com

    关于GitHub,无需我多说,Java语言本身就是开源的,作为Javaer又怎么离得开GitHub,注册没什么需要提的,这是我个人的GitHub地址,欢迎评价点星!

    第二步,注册Sonatype的账户

    地址:https://issues.sonatype.org/secure/Signup!default.jspa

    【友情提示】这里的密码校验真的是很太苛刻了,基本上是我见过的最严格的的。注册过后一定要记在小本本上,否则,我敢说大部分人一小时之后就记不得了,

    第三步,在Sonatype上提交关于本项目的发布申请

    点击页面上方 Create 按钮即可创建此项目的 Issue

    1 Project: Community Support - Open Source Project Repository Hosting (OSSRH)
    2 Issue TypeRequired: New Project
    3 
    4 Summary: java-toolkits (自己项目名称)
    5 Group Id:com.github.songyz0310 (maven项目坐标 Group Id)
    6 Project URL:https://github.com/songyz0310/java-toolkits (项目地址)
    7 SCM url:https://github.com/songyz0310/java-toolkits.git (源代码地址)

     其他内容可以按照自己实际情况填写,可以用默认值的地方,可以不用填写。

    当你提交后状态为等待工作人员审核,审核通过后状态会修改为 RESOLVED

    关于此步骤审核我有个小疑问,我2018年发布flowable-lang项目时,跟2019年发布java-toolkits项目要求有些稍微的不同,后边这一次多了对于权限的校验,不过在工作人员的详细回复下,问题不大。毫无疑问,这次比上次校验的更严格了。当你看到最后这一条评论时,就证明你可以开始下一步了。

    第四步,配置Maven

    4.1,配置 settings.xml 文件

    在servers节点内部添加如下server配置,这里就会用到第二步的注册信息(~偷笑~)

     1 <server>
     2   <id>sonatype-nexus-snapshots</id>
     3   <username>Sonatype账号</username>
     4   <password>Sonatype密码</password>
     5 </server>
     6 <server>
     7   <id>sonatype-nexus-staging</id>
     8   <username>Sonatype账号</username>
     9   <password>Sonatype密码</password>
    10 </server>

    4.2,配置项目 pom.xml 文件

    增加开源许可协议,SCM信息,开发者信息等待根据自己信息填写即可

     1 <licenses>
     2     <license>
     3         <name>The Apache Software License, Version 2.0</name>
     4         <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
     5     </license>
     6 </licenses>
     7 <scm>
     8     <connection>scm:git:https://github.com/songyz0310/java-toolkits.git</connection>
     9     <developerConnection>scm:git:https://github.com/songyz0310/java-toolkits.git</developerConnection>
    10     <url>git:https://github.com/songyz0310/java-toolkits.git</url>
    11 </scm>
    12 <developers>
    13     <developer>
    14         <name>songyz</name>
    15         <email>songyinzeng@gmail.com</email>
    16         <organization>i1stcs</organization>
    17     </developer>
    18 </developers>

    如果发布Release版本,需要添加Release的相关profile配置,distributionManagement节和maven-compiler-plugin节的配置信息根据自己的实际情况做修改。

     1 <profile>
     2     <id>release</id>
     3     <build>
     4         <resources>
     5             <resource>
     6                 <directory>src/main/java</directory>
     7                 <includes>
     8                     <include>**/*.properties</include>
     9                 </includes>
    10             </resource>
    11         </resources>
    12         <plugins>
    13             <!-- Source -->
    14             <plugin>
    15                 <groupId>org.apache.maven.plugins</groupId>
    16                 <artifactId>maven-source-plugin</artifactId>
    17                 <version>2.2.1</version>
    18                 <executions>
    19                     <execution>
    20                         <phase>package</phase>
    21                         <goals>
    22                             <goal>jar-no-fork</goal>
    23                         </goals>
    24                     </execution>
    25                 </executions>
    26             </plugin>
    27             <!-- Javadoc -->
    28             <plugin>
    29                 <groupId>org.apache.maven.plugins</groupId>
    30                 <artifactId>maven-javadoc-plugin</artifactId>
    31                 <version>2.9.1</version>
    32                 <configuration>
    33                     <show>private</show>
    34                     <nohelp>true</nohelp>
    35                     <charset>UTF-8</charset>
    36                     <encoding>UTF-8</encoding>
    37                     <docencoding>UTF-8</docencoding>
    38                     <additionalparam>-Xdoclint:none</additionalparam>
    39                     <!-- TODO 临时解决不规范的javadoc生成报错,后面要规范化后把这行去掉 -->
    40                 </configuration>
    41                 <executions>
    42                     <execution>
    43                         <phase>package</phase>
    44                         <goals>
    45                             <goal>jar</goal>
    46                         </goals>
    47                     </execution>
    48                 </executions>
    49             </plugin>
    50             <!-- GPG -->
    51             <plugin>
    52                 <groupId>org.apache.maven.plugins</groupId>
    53                 <artifactId>maven-gpg-plugin</artifactId>
    54                 <version>1.5</version>
    55                 <executions>
    56                     <execution>
    57                         <phase>verify</phase>
    58                         <goals>
    59                             <goal>sign</goal>
    60                         </goals>
    61                     </execution>
    62                 </executions>
    63             </plugin>
    64             <!--Compiler -->
    65             <plugin>
    66                 <groupId>org.apache.maven.plugins</groupId>
    67                 <artifactId>maven-compiler-plugin</artifactId>
    68                 <version>3.0</version>
    69                 <configuration>
    70                     <source>1.8</source>
    71                     <target>1.8</target>
    72                     <fork>true</fork>
    73                     <verbose>true</verbose>
    74                     <encoding>UTF-8</encoding>
    75                     <showWarnings>false</showWarnings>
    76                 </configuration>
    77             </plugin>
    78             <!--Release -->
    79             <plugin>
    80                 <groupId>org.apache.maven.plugins</groupId>
    81                 <artifactId>maven-release-plugin</artifactId>
    82                 <version>2.5.1</version>
    83             </plugin>
    84         </plugins>
    85     </build>
    86     <distributionManagement>
    87         <snapshotRepository>
    88             <id>sonatype-nexus-snapshots</id>
    89             <name>Sonatype Nexus Snapshots</name>
    90             <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
    91         </snapshotRepository>
    92         <repository>
    93             <id>sonatype-nexus-staging</id>
    94             <name>Nexus Release Repository</name>
    95             <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
    96         </repository>
    97     </distributionManagement>
    98 </profile>

    第五步,配置PGP的公钥信息

    由于我使用的是Windows,Mac和Linux用户请自行查找本步骤解决方案

    Windows下使用gpg4win来进行配置。下载地址 https://www.gpg4win.org/get-gpg4win.html
    安装好之后,打开cmd控制台,使用 gpg --list-keys 命令来查询自己配置的key
    如果提示gpg不是可执行程序或命令,请配置Path路径到 GnuPG 的bin目录

    生成密钥的命令 gpg --gen-key,过程中需要使用到姓名、邮箱等信息,这里的配置最好和Sonatype注册信息、pom文件配置信息保持一致,以免不必要的麻烦。
    生成的过程中,会有个弹框要求输入Passphase信息,这个是密钥的密码,同样需要记牢。发布签名的过程中会用得到。

    使用 gpg --list-keys 命令查询配置好的公私钥信息,使用 gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys <公钥key> 将公钥信息发送到ubuntu.com服务器,后续推送maven仓库会做校验。

    第六步,打包Deploy

    使用 mvn clean deploy -P <profile-id> 命令,一键打包。
    打包过程中会要求输入gpg密钥的Passphase信息,输入即可。

    【友情提示】如果打包过程中出现了401类的错误,可能是因为Maven的配置文件中Server节点配置的用户名和密码不正确,或者 Issue 还未审核通过。

    第七步,发布Release

    进入 https://oss.sonatype.org/#stagingRepositories 查看发布好的构件,点击左侧的Staging Repositories,可以使用Group Id或其他信息搜索自己的项目,

    此时的构件状态为 Open,选中构件,并点击上方的 Close–>Confirm 在下边的Activity选项卡中查看状态。

    当状态变成closed后,执行 Release–>Confirm 并在下边的Activity选项卡中查看状态。
    成功后构件自动删除,一小段时间(约1-2个小时)后即可同步到maven的中央仓库。届时会有邮件通知。


    至此,发布到Maven中央仓库完成。

    第八步,收尾工作

    对自己提交的Issue增加Comment,留言致谢并表示发布已经完成,请工作人员关闭Issue

    有始有终吧。☺☺☺收工~~~

  • 相关阅读:
    创建无线网命令行
    网站推荐(多用于IT)
    企业级快速开发平台
    用代码截图去理解MVC原理
    .Net 下开发使用JSON
    EF实体框架数据操作基类
    EF实体框架数据操作接口
    开启GZIP
    EF快速开发定义数据接口类
    仿造w3school的试一试功能,实现左侧编辑框,右侧效果页面
  • 原文地址:https://www.cnblogs.com/songyz/p/11387978.html
Copyright © 2020-2023  润新知