首页 > 其他分享 >Maven发布开源框架到远程仓库

Maven发布开源框架到远程仓库

时间:2024-03-23 18:33:49浏览次数:34  
标签:1.4 maven jar example Maven application 开源 jforgame 远程

1.背景

当你写了一个自我感觉良好的开源工具希望给他人分享,如果只是在github等网站进行公布之外,用户使用起来还不是很方便,特别是当你提供是特定领域的基础工具。你还可以把它部署到中央仓库,这样别人使用就会方便很多。接下来,我们就来看看如何使用maven发布自己依赖到中央仓库吧。

由于原先的sonatype网站已经退役,发布流程已经很大不一样。笔者只能根据官网摸着石头过河,一路踩坑才完成大业。

2.版本控制规则

先说下,对于发布的工具,我们还是要遵循基本的版本规则,采用常用的三段式。即

主版本号(Major version).次版本号(Minor version).修订号(Revision number)

如:1.2.3

  • 主版本号:版本的主要变更,通常添加新特性会增加主版本号,如从1升级到2.
  • 次版本号:版本的次要变更,修复bug或增加小特性会增加次版本号,如从2.1升级到2.2.
  • 修订号:版本的微小变更,通常修复bug或优化功能会增加修订号,如从2.2.1升级到2.2.2.

3.注册Sonatype账户

3.1Sonatype介绍

Sonatype是一家软件公司,专注于提供Maven和Nexus仓库管理工具。Sonatype负责管理和维护Maven中央仓库。该仓库是Maven生态系统中最重要的公共仓库之一,包含了大量的开源Java项目和库。

原先的网站https://issues.sonatype.org/secure/Signup!default.jspa 

官方已宣布退役,原文

3.2新注册网站

前往Maven Central: Search 注册,点击右上方的注册按钮。注册过程很简单,不详述。

3.3新建命名空间

注册成功,系统会弹出一个添加命名空间的界面。如果使用github账户登录,有可能不会弹出这个界面。因为系统自动会你创建一个 io.github.<your GitHub username>的命名空间。

发布依赖需要一个命名空间,也就是maven系统的groupId。如果自己没有申请公网域名的话,可以使用github这个免费域名。

3.4验证命名空间

在自己的github上创建一个临时项目,证明域名是自己的(临时仓库名字系统会提供,域名验证成功后可以删除)。

创建之后,等待一会会,可以看到命名空间的状态变为已验证

4.修改pom文件

根据sonatype的官方要求,修改项目的pom文件,参考下 官方对发布项目的基本要求

4.1增加标签

主要需要添加几个标签,如下所示

    <issueManagement>
        <system>GitHub Issues</system>
        <url>https://github.com/kingston-csj/jforgame/issues</url>
    </issueManagement>
    <scm>
        <connection>scm:git:https://github.com/jforgame/jforgame.git</connection>
        <developerConnection>scm:git:[email protected]:jforgame/jforgame.git</developerConnection>
        <url>https://github.com/jforgame/jforgame</url>
    </scm>

    <licenses>
        <license>
            <name>Apache License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
            <distribution>repo</distribution>
        </license>
    </licenses>
    <developers>
        <developer>
            <id>kingston-csj</id>
            <name>kingston</name>
            <email>[email protected]</email>
            <organizationUrl>https://github.com/kingston-csj</organizationUrl>
            <roles>
                <role>owner</role>
                <role>developer</role>
            </roles>
        </developer>
    </developers>

4.2部署包带上source文件和doc文件

sonatype要求部署的包要附带源代码及API文档,即增加两个文件

example-application-1.4.7-sources.jar
example-application-1.4.7-javadoc.jar

只需在pom文件加两个插件即可

<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>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.9.1</version>
    <executions>
        <execution>
            <id>attach-javadocs</id>
            <goals>
                <goal>jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>

4.3提供文件校验码

对每个上传的文件(除了asc文件),需要附加校验码文件(md5+sha1)。
后文介绍(central-publishing-maven-plugin插件内嵌本功能)

假设你上传的文件为

example-application-1.4.7.pom
example-application-1.4.7.jar
example-application-1.4.7-sources.jar
example-application-1.4.7-javadoc.jar

需要部署的文件为

example-application-1.4.7.pom.md5
example-application-1.4.7.pom.sha1
example-application-1.4.7.jar.md5
example-application-1.4.7.jar.sha1
example-application-1.4.7-sources.jar.md5
example-application-1.4.7-sources.jar.sha1
example-application-1.4.7-javadoc.jar.md5
example-application-1.4.7-javadoc.jar.sha1

5.GPG签名

GPG(GNU Privacy Guard)是一种加密和签名工具,常用于软件包的签名和验证。在Maven中,GPG签名用于确保发布到远程仓库的依赖是经过验证和可信的。若希望发布依赖到远程仓库,需要进行GPG签名。

5.1下载GPG秘钥

前往官网下载 -->  gpg下载

5.2创建密钥 

使用Kleopatra(GPG可视化工具),创建密钥 

点击文件->新建OpenGPG秘钥对,输入名称和邮箱,勾选“使用密码句保护生成的密钥”

生成之后,右键证书,选择“在服务器上发布”

也可以选择使用命令行

gpg --keyserver keyserver.ubuntu.com --send-keys yourPublicKey

6.使用maven部署

6.1sonatype生成用户token

在 sonatype  生成用户token

6.2setting文件添加server

 maven配置文件setting.xml添加生成的token

<settings>
  <servers>
    <server>
      <id>central</id>
      <username>token-username</username>
      <password>token-password</password>
    </server>
  </servers>
</settings>

6.3setting文件添加gpg签名

<settings>
  <profiles>
    <profile>
      <id>ossrh</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <gpg.executable>gpg</gpg.executable>
        <gpg.passphrase>the_pass_phrase</gpg.passphrase>
      </properties>
    </profile>
  </profiles>
</settings>

6.4修改pom文件的版本号

在多模块应用,版本号一般下载最顶层的pom.xml里。见<properties>的<revision>标签。

    <groupId>io.github.jforgame</groupId>
    <artifactId>jforgame-parent</artifactId>
    <version>${revision}</version>
    <packaging>pom</packaging>
    <name>jforgame-parent</name>
    <url>https://github.com/jforgame/jforgame</url>
    <properties>
        <revision>1.0.0</revision>
    </properties>

在发布的时候,如果手动挨个修改版本号超麻烦。可以使用maven的版本插件,直接在项目根pom.xml目录下,使用以下命令就能轻松设置工程等的版本。

mvn versions:set -DnewVersion="1.0.0"

6.5使用maven发布插件

使用依赖可以方便对依赖进行发布,详情见官网--> sonatype依赖部署插件

父pom文件加入插件申明 

<build>
    <plugins>
        <plugin>
          <groupId>org.sonatype.central</groupId>
          <artifactId>central-publishing-maven-plugin</artifactId>
          <version>0.4.0</version>
          <extensions>true</extensions>
          <configuration>
            <publishingServerId>central</publishingServerId>
            <tokenAuth>true</tokenAuth>
          </configuration>
        </plugin>
    <plugins>
</build>

其中publishingServerId 标签代表的serverId是配置在maven安装目录config下的setting.xml。

注意:项目采用多模块,如果不想部署全部子模块,只需要在父pom文件的<modules>标签注释掉过滤的模块即可。

在根目录下,执行

mvn deploy -DskipTests

6.6sonatype网站真正发布

执行成功之后,在sonatype网站可以看到上传的bound文件。

选择“Publish”按钮就可以完成发布啦。 

发布之后,泡杯茶,回来就可以在中央仓库,找到自己的代码了。

 6.7项目中使用

pom文件使用中央仓库(其他仓库同步仍需时间

<repositories>
        <repository>
            <id>central</id>
            <name>central</name>
            <url>https://repo1.maven.org/maven2</url>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
</repositories>>

引入依赖 

<dependency>
    <groupId>io.github.jforgame</groupId>
    <artifactId>jforgame-socket-netty</artifactId>
    <version>1.0.0</version>
</dependency>

一行代码即可创建socket网络服务

		TcpSocketServerBuilder.newBuilder()
				.bindingPort(HostAndPort.valueOf(ServerConfig.getInstance().getServerPort()))
				.setMessageFactory(GameMessageFactory.getInstance())
				.setMessageCodec(new StructMessageCodec())
				.setSocketIoDispatcher(new MessageIoDispatcher(ServerScanPaths.MESSAGE_PATH))
				.build()
				.start();

 

标签:1.4,maven,jar,example,Maven,application,开源,jforgame,远程
From: https://blog.csdn.net/littleschemer/article/details/136804390

相关文章

  • 【附源码】java数字家谱管理系统(ssm毕业设计+maven+vue+计算机专业)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义标题:数字家谱管理系统的选题背景及其意义随着信息技术的快速发展,数字化已经成为现代社会的一种趋势。在传统文化的传承与保护方面,数字技术的应用尤为重要。家谱作......
  • 【附源码】java双端的在线学习考试平台(ssm毕业设计+maven+vue+计算机专业)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在信息技术日益发展的今天,教育行业也在经历着前所未有的变革。传统的面对面教学模式逐渐向线上教育模式转变,这一趋势在全球范围内愈发明显。尤其是在全球......
  • 远程代码执行
    远程代码执行一、什么是远程代码执行?远程代码执行RemoteCodeExecute远程命令执行RemoteCommandExecute由于程序中预留了执行代码或者命令的接口,并且提供了给用户使用的界面,导致被黑客利用,控制服务器。为什么要执行代码?网络设备的web管理界面自动化运维系统漏洞危......
  • 开源的数据可视化平台 Kibana 日志可视化 mac 安装笔记
    拓展阅读日志开源组件(一)java注解结合springaop实现自动输出日志日志开源组件(二)java注解结合springaop实现日志traceId唯一标识日志开源组件(三)java注解结合springaop自动输出日志新增拦截器与过滤器日志开源组件(四)如何动态修改springaop切面信息?让自动日志输出......
  • maven父子模块统一管理版本号
    背景:在使用Maven多模块结构工程时,版本管理是一件很繁琐且容易出错的事情。每次升级版本号都要手动调整或者通过mvnversions:set-DnewVerion=xx命令去更改每一个子模块的版本号,非常的不方便解决方案:Maven官方文档说:自Maven3.5.0-beta-1开始,可以使用${revision},${sha1......
  • 一款简单易学能快速上手的php开源代码,从创建一个网站开始学习
    简单易学能快速上手的php开源代码从建站源码开始学习PHP建站,php语法、逻辑、判断、调用数据等操作类型)此开源代码选择了比较成熟的ThinkPHP框架开发并遵循Apache2开源许可协议发布,拥有快速、简单的面向对象的轻量级PHP开发框架,秉承简洁实用的设计原则,在保持出色的性能和......
  • .NET开源、免费、强大的交互式绘图库
    前言今天大姚给大家分享一款.NET开源(采用MIT许可证)、免费、强大的交互式绘图库,该库能够轻松地实现大型数据集的交互式显示。使用几行代码即可快速创建折线图、柱状图、饼图、散点图等不同类型的图表:ScottPlot。ScottPlot类库支持平台和框架ConsoleApplication、WinForms、WPF......
  • Mall4j开源商城系统-基于SpringBoot+Vue系统开发介绍
     今天来介绍一款非常不错的Mall4j开源商城系统Mall4j开源商城,一个基于springboot、springoauth2.0、mybatis、redis的轻量级、前后端分离、防范xss攻击、拥有分布式锁,为生产环境多实例完全准备,数据库为b2b2c设计,拥有完整sku和下单流程的开源商城。目录 今天来介绍一......
  • 开源计算机视觉库OpenCV详解
    OpenCV(OpenSourceComputerVisionLibrary)是一个开源的计算机视觉和机器学习软件库。OpenCV最初由Intel开发,后来支持由WillowGarage和Itseez(被Intel收购)进行的维护和更新。这个库旨在为实时的计算机视觉应用提供一个高效的、易于使用的环境,并且是用C++编写的,尽管它提供了......
  • 基于ssm的风景文化管理平台,旅游信息管理系统,附源码+数据库+论文+PPT,包远程安装调试
    1、项目介绍根据木里风景文化管理平台的功能需求,进行系统设计。前台功能:用户进入系统可以实现首页,旅游公告,景区,景区商品,景区美食,旅游交通工具,红黑榜,个人中心,后台管理,购物车等进行操作;后台主要是管理员,管理员功能包括首页,个人中心,用户管理,旅游公告管理,景区管理,景区商品管理,门......