首页 > 其他分享 >一键搞定发布自己Jar到Maven中央仓库

一键搞定发布自己Jar到Maven中央仓库

时间:2023-07-09 10:34:26浏览次数:42  
标签:maven 项目 -- Jar gpg 一键 秘钥 Maven org

做java 开发那当然离不开jar包管理, 不知何时一直想想封装一个自己的jar
然后发布到maven中央仓库给别人使用。

hhh 我感觉自己写一个jar包工具然后,被很多人使用是一件很牛,很快乐事情。

终于有了这个机会,和时间。SpringBoot stater出来了 基于场景启动器你可以轻松定义自己的stater组件,然后甚至,可以发布到maven仓库。供大家使用。

我总结,写了一个作为我工作多年程序员,自己工具类库,stater。

Github地址

基于它,你可以轻松开发SpringBoot WEB API,提高效率。不在去关心一些繁琐。重复工作,而是把重点聚焦到业务。

回到正题,这篇文章基于我这个,stater讲一下。如何把自己定义stater 发布到maven中央仓库。

注册 sonatype账号

进入 issues.sonatype.org 注册自己的账号,基于这个平台,快速发布到maven仓库

注册完成后记住,账号密码,后面发布需要使用授权

创建自己的maven项目工单

注册完成后我们创建自己,发布的maven项目,点击新建

项目选择:Community Support - Open Source Project Repository Hosting (OSSRH)

问题类型选择:New Project

*的是必填项,其余留空或者保持默认即可,然后新建工单等待管理员审核

项目地址填一个你的项目的Github仓库地址。这里还是强调一下组id的填写,组id需要根据你自己的域名或者开源仓库地址来填。

后面在问题-我的报告中可以追踪issue的审核情况

等待管理员审核。审核完成,管理员会在下面提示你让你验证这个域名是你的或者证明gitee或者github空间是你的

关闭maven工单项目

maven工单项目审核通过后,会有邮件提醒。

新建成功issue后需要等待Sonatype的工作人员进行审核,审核时间大约几分钟左右(我当时5min貌似有人几小时的....),审核通过后issue的Status会转变为Resolved,此时你就可以进行下一步操作了

你点击问题---找到你自己新建的项目

然后点击Respond按钮开启工单,让管理员去验证。

等待验证完成,管理员就会接着回复你验证成功,这就说明你的工单通过了,可以上传项目了

如果是用域名,则管理员会让你给你的域名添加一个TXT解析,然后他来验证:

没问题,这个时候可以关闭问题

项目配置

maven 配置

在你maven配置文件中配置你注册issues.sonatype.org账号密码

在maven 的conf文件夹下settings.xml 文件的servers节点配置如下

 <server>
      <id>snapshots</id>
      <username>kenx</username>
      <password>xxxx</password>
    </server>
    <server>
      <id>releases</id>
      <username>kenx</username>
      <password>xxxx</password>
    </server>
    <server>
      <id>ossrh</id>
      <username>kenx</username>
      <password>xxx</password>
    </server>

秘钥配置

使用gpg生成秘钥

上传项目需要秘钥签名认证。本地需要生成密码。并且把公钥上传服务。

生成秘钥

gpg --gen-key

运行后gpg要求你选择加密算法,过期时间等等,这些直接选择默认值即可。通过对比发现,gpg 2.0以上的版本运行gpg --gen-key命令 会跳过这些步骤。

之后gpg要求你输入姓名,邮箱以及关键的Passphrase(这个密码要自己记住,后面有用),依次输入即可。然后gpg为你生成了一对秘钥。

查看秘钥

gpg --list-keys

在pub字段下面有一个十六进制数,那就是这个秘钥的ID

然后我们要把这个秘钥上传至公钥服务器,使用如下命令:

gpg --keyserver keyserver.ubuntu.com --send-keys 秘钥ID

验证是否成功地上传到了服务器:

gpg --keyserver keyserver.ubuntu.com --recv-keys 秘钥ID

如果两条命令执行输出结果都如下说明成功:

这样,就完成了秘钥的配置了。

修改项目pom配置

接下来我们需要配置我们项目中pom 文件,

<groupId>cn.soboys</groupId>
    <artifactId>rest-api-spring-boot-starter</artifactId>
    <version>1.3.0</version>
    <packaging>jar</packaging>
    <name>rest-api-spring-boot-starter</name>
    <description>SpringBoot Easy Fast Rest WEB 提高SpringBoot Web开发工作效率 RestFull API使用 全局错误拦截,参数校验, 错误国际化 ,自定义错误响应 ,业务异常断言 ,Redis 工具库使用 ,RestTemplate 请求工具 ,日志使用 ,集成mybatisPlus一键代码生成</description>
    <url>https://github.com/coder-amiao/rest-api-spring-boot-starter</url>

    <!-- 项目设定 -->
    <properties>
        <java.version>1.8</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <gpg.passphrase>1234qwer</gpg.passphrase>
        <gpg.keyname>E933FBC878FB2EC0900A2ABAF79C3CD9E9E6A8EF</gpg.keyname>
        <gpg.homedir>/Users/xiangyong/.gnupg</gpg.homedir>
    </properties>



    <!-- 许可证信息,这里是Apache 2.0的许可证,大家根据实际情况修改 -->
    <licenses>
        <license>
            <name>The Apache Software License, Version2.0</name>
            <url>https://www.apache.org/licenses/</url>
            <distribution>repo</distribution>
        </license>
    </licenses>


    <!--   开发人员信息         -->
    <developers>
        <developer>
            <name>三时</name>
            <email>[email protected]</email>
        </developer>
    </developers>

    <!--   项目仓库信息         -->
    <scm>
        <connection>scm:git:https://github.com/zw201913/jtile38.git</connection>
        <developerConnection>https://github.com/coder-amiao/rest-api-spring-boot-starter</developerConnection>
        <url>https://github.com/coder-amiao/rest-api-spring-boot-starter.git</url>
        <tag>v${project.version}</tag>
    </scm>

    <!-- 中央仓库地址配置,不需要修改 -->
    <distributionManagement>
        <snapshotRepository>
            <id>ossrh</id>
            <url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
        </snapshotRepository>

        <repository>
            <id>ossrh</id>
            <url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
    </distributionManagement>

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <!-- Source -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.2.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!-- Javadoc工具 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>2.10.4</version>
                <configuration>
                    <additionalJOptions>
                        <additionalJOption>-Xdoclint:none</additionalJOption>
                    </additionalJOptions>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!-- GPG -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-gpg-plugin</artifactId>
                <version>1.6</version>
                <configuration>
                    <gpgArguments>
                        <arg>--pinentry-mode</arg>
                        <arg>loopback</arg>
                    </gpgArguments>
                </configuration>
                <executions>
                    <execution>
                        <id>sign-artifacts</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>sign</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

注意配置的groupId, 必须和你之前创建的maven项目工单保持一致

pom.xml 中必须包括:name、description、url、licenses、developers、scm 等基本信息,使用了 Maven 的 profile 功能,只有在 release 的时候,创建源码包、文档包、使用 GPG 进行数字签名。

此外,snapshotRepository 与 repository 中的 id 一定要与 setting.xml 中 server 的 id 保持一致。

如果是多模块项目的话,只需要在父 pom.xml 中声明这些,子 pom.xml 中只需要修改相应的一些信息,如 name 标签。

项目发布

接下来你可以使用deploy 发布项目

或者命令

mvn clean deploy

发布项目到中央仓库

上面的步骤只是把项目传到了Sonatype上了,还没有发布出去。

进入s01.oss.sonatype.org,登录,账号是之前注册账号用户名和密码

点击旁边的Staging Repositories即可看到我们发布的项目。

勾选项目,点击close按钮,开始进行项目校验。

再点击下面的active标签可以查看close的进度:

显示All rules passed: Central Sync Requirement就说明校验通过,可以发布了。

如果过程正按钮是灰色,或者不能点击,重复刷新等待就行(有可能是网络等其他原因)。然后重复上面步骤。即可

再点击上面的release按钮即可发布到中央仓库了。

完成后,大约过个2个小时,你就可以在search.maven.org找到你的发布的项目了!

总结概括

以后发布项目,如果groupId不变的话,我们就不需要再去申请工单了。

直接重复上述的二、三、四步中的部分关键步骤即可。

上述settings.xml已经配置了servers,

就不用再次配置了,即第二步配置settings.xml可以省略了。秘钥也已经生成过了,也不需要再次生成了, 即第三步的秘钥生成也不需要了。不过如果更换了电脑,那就要重新配置settings.xml并重新生成并上传秘钥了。

关注公众号,程序员三时 持续输出优质内容 希望给你带来一点启发和帮助

标签:maven,项目,--,Jar,gpg,一键,秘钥,Maven,org
From: https://www.cnblogs.com/kenx/p/17538390.html

相关文章

  • maven打包慢,使用maven-mvnd 打包可以快一半
    maven打包打包系统包时,因子工程模块很多,打包越来越慢。。今天试试mavend,比maven打包更快的包。打包后,发现时间比原来的,缩短了 打开https://github.com/apache/maven-mvnd/releases 找到想要的包linux版下载#mkdir-p/app/mvnd#cd/app/mvnd#wgethttps://github......
  • 别再说代码质量难评估了!SonarQube一键分析代码质量他不香吗?
    无论是架构师还是研发经理,代码质量都是必须要关注的重点。Sonar(没错,是Sonar,不是SonarQube)是一个用于代码质量管理的开源平台,用于管理代码的质量。它通过插件形式可以支持二十几种语言的代码质量检测,通过多个维度的检查了快速定位代码中潜在的或者明显的错误。千里之行始于足下,......
  • 别再说代码质量难评估了!SonarQube一键分析代码质量他不香吗?
    无论是架构师还是研发经理,代码质量都是必须要关注的重点。Sonar(没错,是Sonar,不是SonarQube)是一个用于代码质量管理的开源平台,用于管理代码的质量。它通过插件形式可以支持二十几种语言的代码质量检测,通过多个维度的检查了快速定位代码中潜在的或者明显的错误。千里之行始于足下,今......
  • PS修图插件,一键美颜,你知道吗?
    PS修图插件,你知道吗?快速智能修图统一肤色、美白皮肤多种功能等你解锁快来和酷酷看看修图效果吧~操作步骤1、双击【签署文件】-【确定】2、右击【PS】-【打开文件所在的位置】3、进入Required\CEP\extensions文件夹4、将【至臻版】文件夹拖动到【extensions】文件夹......
  • Spingboot启动jar包引用外部的yml配置文件
    Spingboot启动jar包引用外部的yml配置文件1、指定文件目录命令java-jarxxxxx.jar--spring.config.location=路径(application.yml)2、jar包目录下java-jarxxxx.jar2.1可以在当前Jar文件目录建config同级目录,这个config同级目录放入application.yml2.2也可以在当前......
  • Linux操作系统中,*.zip、*.tar、*.tar.gz、*.tar.bz2、*.tar.xz、*.jar、*.7z等格式的
    Linux操作系统中,.zip、.tar、.tar.gz、.tar.bz2、.tar.xz、.jar、*.7z等格式的压缩与解压zip格式压缩:zip-r[目标文件名].zip[原文件/目录名]解压:unzip[原文件名].zip1.2.注:-r参数代表递归tar格式(该格式仅仅打包,不压缩)打包:tar-cvf[目标文件名].tar[原文件名/目录......
  • 一键脱环境
        functiondeEnvironment_defineHeader_function_proto(ObjEct){//第一步定义头部函数,并关联上级原型链ObjEct.name=ObjEct.constructor.name;letjsCode="";try{newObjEct()jsCode+=`${ObjEct.name}=function${ObjEct......
  • SpringBoot部署打包成jar和war有什么不同?
    引言你是否发现,在springboot项目中,用mvninstall打包成jar形式,然后换一台拥有jdk的机器,就可以直接通过java-jar项目名.jar的方式运行,没有任何问题并且不需要tomcat打包成war放进tomcat运行,发现端口号变成tomcat默认的8080(我在server.port中设置端口8090)项目名称......
  • IDEA新建多模块maven项目
    1、new=>projetc=>maven=>,新建完成后删除src目录  2、增加java模块例:robots2-common项目根目录就是【robots2-parent】右键项目,openmodelsettings选择新建模块newmodule 3、增加web模块,配置spring入口信息项目根目录就是【robots2-parent】右键项目,openm......
  • mac配置maven时报错
    mac配置maven时报错mac配置完jdk时,可以显示jdk的版本信息,但是配置完maven的时候,输入mvn-v命令就提示以下错误信息: 修改方法:vim~/.bash_profileexportJAVA_HOME=/usr/libexec/java_home-v1.8exportJAVA_HOME=$JAVA_HOMEexportPATH=/opt/apache-maven-3.6.3/bin:$PAT......