Maven发布Release到中心仓库历程记录(无个人域名)

前言

因为前段时间自己做了一个爬虫项目(地址),自己很希望分享到maven中心仓库上,感觉拥有自己的jar包令我兴奋,便开始了maven发布的探索之路,在 这个过程中,遇到了不少的问题,本文把整个过程记录下来,希望以后能够帮助到有需要的人

准备工作

  • 注册maven发布的账号

    注册地址:注册,注册过程中最好能保存一下密码,不然真的很容易忘记,注册过程我就不多说了,把用户名,密码填写完就行了

  • 创建一个发布项目的issue

    创建地址:创建

    创建的注意事项:

  • 下载安装GPG并生成密钥

    下载地址:下载

    下载时候注意一下,它会让你捐赠的,如果你不想捐赠,可以选择捐赠0,然后点击下载,安装时候,一路点击下一步就行了,注意第一步就会让你选择语言,最好选简体中午,如果你英语8级,当我没说

    生成密钥

    生成密钥有两种方式:命令行和GPG界面生成

    1.命令行:

     生成:
    
    gpg --gen-key
    Real name: 名字(E文)(我填了fanyong)
    Email address: 邮箱(自己的邮箱,我的是1023079644@qq.com)
    You selected this USER-ID:
    "xxx[xxx@qq.com](mailto:xxx@qq.com)"
    Change (N)ame, (E)mail, or (O)kay/(Q)uit? o
    之后往下,会让你输入用户名和邮箱,还有一个Passphase(输入两次,我的是fanyong920),相当于密钥库密码,不要忘记。
    查看公钥
    gpg --list-keys 查询结果:
    C:/Users/fanyong/AppData/Roaming/gnupg/pubring.kbx
    --------------------------------------------------
    pub rsa2048 2020-06-06 [SC] [expires: 2022-06-06]
    85B594371E0A38D70243B1E927EDC1D952E45892
    uid [ultimate] fanyong <1023079644@qq.com>
    sub rsa2048 2020-06-06 [E] [expires: 2022-06-06]
    其中85B594371E0A38D70243B1E927EDC1D952E45892就是你的公钥的指纹
    发布公钥:
    gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 85B594371E0A38D70243B1E927EDC1D952E45892
    查询发布公钥是否成功
    gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 85B594371E0A38D70243B1E927EDC1D952E45892 成功的话会有如下结果
    gpg: key 27EDC1D952E45891: "fanyong <1023079644@qq.com>" not changed
    gpg: Total number processed: 1
    gpg: unchanged: 1

    2.操作界面

    ​ 第一步

    ​ 第二步:

    填写密钥密码,我的是fanyong920,这一步我借用了别人的截图,所以图片上填的不是fanyong920

    第三步:公钥上传至服务器

    如果上传服务器失败,则试着更改一下服务器地址:

    设置(S)->配置Kleopatra(C),修改 OpenPGP密钥服务器。

    可选的服务器地址:

    在你上传过程中,如果密钥不存在服务器,那么就会有错误提示信息,里面的服务器地址就是可选的

    到这里准备工作就已经做好了

    按照issue一步一步往下走

    如果你是上午提的issue,估计很快就会得到了回复,因为老外在线,如果你是下午的话,有可能要到半夜才能回你了

    1.如果issue得到了回复,那么应该是如下这样:

    2.issue的第二次得到回复

    因为我的项目是放在github上,并且用了io.github.fanyong920的域名作为groupId,所以对方要验证fanyong920是不是我的账号

    3.issue的第三次得到回复

接下来就是最重要的步骤了:上传jar包到release,snapshot仓库

我只是发布了release版本,所以下面步骤以上传jar到release仓库为例:

  • Maven的settins文件设置

    1.在servers中添加

    <server>
    <id>sonatype-nexus-snapshots</id>
    <username>https://issues.sonatype.org的账号</username>
    <password>https://issues.sonatype.org的密码</password>
    </server>
    <server>
    <id>sonatype-nexus-staging</id>
    <username>https://issues.sonatype.org的账号</username>
    <password>https://issues.sonatype.org的密码</password>
    </server>
    <server>
    <id>ossrh</id>
    <username>https://issues.sonatype.org的账号</username>
    <password>https://issues.sonatype.org的密码</password>
    </server>

    2.在mirrors中配置了阿里云仓库,已经配置的可以跳过

    <mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
    </mirror>

    3.在profiles中配置

    <profile>
    <id>ossrh</id>
    <activation>
    <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
    <gpg.executable>C:/Program Files (x86)/GnuPG/bin/gpg.exe</gpg.executable>
    <gpg.passphrase>上面生成的密钥密码:fanyong920</gpg.passphrase>
    <gpg.homedir>{找到dir:cmd->gpg --list-key}C:/Users/fanyong/AppData/Roaming/gnupg</gpg.homedir>
    </properties>
    </profile>
  • POM.xml文件设置

    1.配置必须的标签:url,developers,licenses,scm,distributionManagement

<url>https://github.com/fanyong920/jvppeteer</url>
<developers>
<developer>
<id>fanyong</id>
<name>fanyong</name>
<email>1023079644@qq.com</email>
<roles>
<role>Project Manager</role>
<role>Architect</role>
</roles>
<timezone>+8</timezone>
</developer>
</developers>
<licenses>
<license>
<name>Apache License</name>
<url>https://github.com/fanyong920/jvppeteer/blob/master/LICENSE</url>
</license>
</licenses>
<scm>
<url>https://github.com/fanyong920/jvppeteer</url>
<connection>https://github.com/fanyong920/jvppeteer.git</connection>
</scm>
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>

2.配置发布的maven插件

里面有个配置:com.ruiyun改成你对应的包结构

<build>
<!-- configured plugins -->
<pluginManagement>
<plugins>
<plugin>
<groupId>biz.aQute.bnd</groupId>
<artifactId>bnd-maven-plugin</artifactId>
<version>4.3.1</version>
<executions>
<execution>
<goals>
<goal>bnd-process</goal>
</goals>
<!-- com.ruiyun改成你对应的包结构 -->
<configuration>
<bnd><![CDATA[
Export-Package: \
com.ruiyun.*
-noextraheaders: true
-snapshot: SNAPSHOT
]]></bnd>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</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.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.3</version>
<configuration>
<encoding>UTF-8</encoding>
<aggregate>true</aggregate>
<charset>UTF-8</charset>
<docencoding>UTF-8</docencoding>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.8</version>
</plugin>
</plugins>
</pluginManagement>
<sourceDirectory>src/main/java</sourceDirectory>
<testSourceDirectory>src/test/java</testSourceDirectory>
<plugins>
<plugin>
<groupId>biz.aQute.bnd</groupId>
<artifactId>bnd-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>ossrh</id>
<activation>
<property>
<name>performRelease</name>
<value>true</value>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>biz.aQute.bnd</groupId>
<artifactId>bnd-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<serverId>ossrh</serverId>
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
</plugin>
</plugins>
</build>
</profile>
</profiles>
  • 执行发布命令

    mvn clean deploy -P ossrh
    
    这里的ossrh是对应profile的id

    顺利的话,这个命令会BUILD SUCCESS

发布成功后,你还需要在iusse上回复对方,你已经发布了release版本到maven中心了

一般在这时候,两个小时左右,你的jar包就同步到了maven中心。

在未同步之前,你可以到https://search.maven.org 查看你的jar包的具体信息

我的搜索出来就是这个样子:

我的爬虫框架的坐标是:

<dependency>
<groupId>io.github.fanyong920</groupId>
<artifactId>jvppeteer</artifactId>
<version>1.0.1</version>
</dependency>

如何发布快照版本?

在pom.xml中的项目版本号后面加上 -SNAPSHOT 就行

不需要执行关闭、发布构建步骤,(对应nexus-staging-maven-plugin的autoReleaseAfterClose)快照版发布后就可以直接引用了

Maven发布Release到中心仓库历程记录(无个人域名)的更多相关文章

  1. Maven发布封装到中央仓库时候报错:no default secret key: No secret key

    今天因为发布swagger-spring-boot-starter做一个问题的修复,然后碰到了下面这个问题,记录一下解决过程,帮助后续碰到类似问题的童鞋: *gpg: WARNING: "- ...

  2. 如何发布代码到maven中心仓库

    deploy to sonatype 参考文章 https://blog.csdn.net/xuefu_78/article/details/52494698 https://blog.csdn.ne ...

  3. maven中心仓库OSSRH使用简介

    目录 简介 为什么使用中心仓库 发布到中心仓库前的准备工作 使用OSSRH 使用Sonatype创建ticket 中央仓库中的组件要求 提供Javadoc 和源代码 使用GPG/PGP给文件签名 Me ...

  4. maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令

    maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令 在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository. ...

  5. Maven中心仓库

    当你使用Maven构建一个项目,Maven会检查你的pom.xml文件,找出需要下载的依赖包.首先它会到本地仓库查找所需的文件,如果没找到,就到默认的中心仓库(这是新的http://search.ma ...

  6. Maven学习总结(三):修改从Maven中心仓库下载到本地的jar包的默认存储位置

    一:修改从Maven中心仓库下载到本地的jar包的默认存储位置 从Maven中心仓库下载到本地的jar包的默认存放在”${user.home}/.m2/repository”中,${user.home ...

  7. maven 发布到本地仓库

    1.maven打包命令 maven package命令只是将你需要打包的项目打包到项目的class文件夹下面,并没有发布到本地仓库或者私服上面,现在多模块开发的打包一般依赖私服或者 本地仓库,因此,我 ...

  8. 修改从Maven中心仓库下载到本地的jar包的默认存储位置及远程仓库

    从Maven中心仓库下载到本地的jar包的默认存放在”${user.home}/.m2/repository”中,${user.home}表示当前登录系统的用户目录(如"C:\Users\g ...

  9. Maven私服Nexus3.x环境构建操作记录

    Maven介绍Apache Maven是一个创新的软件项目管理和综合工具.Maven提供了一个基于项目对象模型(POM)文件的新概念来管理项目的构建,可以从一个中心资料片管理项目构建,报告和文件.Ma ...

随机推荐

  1. Crash-fix-1:PhoneWindow$DecorView{29b8ae38 V.E..... R.....I. 0,0-1160,607} not attached to window ma

    最近开始对APP上的Crash进行对应,发现有好多常见的问题,同一个问题在多个APP都类似的出现了,这里记录下这些常见的错误. crash log: java.lang.IllegalArgument ...

  2. jQuery学习笔记——jQuery基础核心

    代码风格 在jQuery程序中,不管是页面元素的选择.内置的功能函数,都是美元符号“$”来起始的.而这个“$”就是jQuery当中最重要且独有的对象:jQuery对象,所以我们在页面元素选择或执行功能 ...

  3. (Python基础教程之十二)Python读写CSV文件

    Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...

  4. PHP EOF使用说明

    PHP EOF(heredoc) 使用说明 PHP EOF(heredoc)是一种在命令行shell(如sh.csh.ksh.bash.PowerShell和zsh)和程序语言(像Perl.PHP.P ...

  5. 如何搭建一个WEB服务器项目(二)—— 对数据库表进行基本的增删改查操作

    使用HibernateTemplate进行增删改查操作 观前提示:本系列文章有关服务器以及后端程序这些概念,我写的全是自己的理解,并不一定正确,希望不要误人子弟.欢迎各位大佬来评论区提出问题或者是指出 ...

  6. 【雕爷学编程】MicroPython动手做(01)——春节后入手了K210开发板

    Python的开放.简洁.黏合正符合了现发展阶段对人工智能.大数据分析.可视化.各种平台程序协作产生了快速的促进作用.自Python3的发布到现在已有五六年的时间,从刚发布的反对声音到慢慢被接受与喜欢 ...

  7. React-Redux填坑

    这篇东西以后慢慢补充. Q:今天遇到一个问题是 TypeError:dispatch is not a function A:一直报这个type error,调试了好一阵,最后在tof上看到网友说co ...

  8. Angular中的数据绑定

    (1)HTML绑定:{{}} (2)属性绑定:[] 注意:属性绑定通常赋值为变量,如果赋值为常量(如字符串常量) 必须用引号括起来,如<img [src]="'../../assets ...

  9. Django数据库表初始化缓存清除

    新建的django项目中没有应用app01??? models中也没有UserInfo表???? 但在migrate是却一直报错!!!!! 产生此种现象的原因: 之前的项目中肯定是用到过应用app01 ...

  10. ionic + asp.net core webapi + keycloak实现前后端用户认证和自动生成客户端代码

    概述 本文使用ionic/angular开发网页前台,asp.net core webapi开发restful service,使用keycloak保护前台页面和后台服务,并且利用open api自动 ...