Maven学习1_将项目打包jar然后上传到GitHub、Nexus Sonatype仓库、搭建Sonatype私服

news2025/1/15 22:44:01

概述

主要学习记录Maven仓库相关知识,如何借助上传项目jar包到GitHub、Nexus Sonatype,,以及搭建自己的Nexus Sonatype私服,然后在Maven项目的pom文件引入使用,参考Maven官网文档:https://central.sonatype.org/publish/publish-maven/

需要了解:Maven中央仓库并不支持直接发布jar 包,需要将jar 包发布到一些指定的第三方Maven仓库,然后该仓库再将jar 包同步到Maven中央仓库,Sonatype便是Maven中央仓库指定的暂存库。

目录

  1. 借助GitHub搭建属于自己的maven仓库
  2. 借助Nexus Sonatype发布jar包到sonatype仓库
    1. 在sonatype提交发布工单(Issue)
    2. 配置gpg秘钥连接sontype仓库,配置pom.xml和setting.xml
    3. 发布执行mvn clean deploy
  3. 借助Nexus Sonatype搭建自己的maven私服

一、借助GitHub搭建属于自己的maven私服仓库

参考:https://juejin.cn/post/6979850007692181535,https://developer.aliyun.com/article/924317

1、首先本地创建文件夹用于本地仓库,待会需要推送到远程GitHub仓库,如我的D:\mysoftware_notinstall\maven-3.9\github-maven-repository,然后在该文件下可以添加说明文件README.md,并创建repository文件夹,以后发布的jar需要整到该文件夹,然后传到远程仓库。

2、新建远程仓库,比如我的仓库地址是:https://github.com/sichaolong/maven-repository,然后创建 发行分支release、快照分支snapshot,方便jar包版本管理,最后将本地的maven-repository推送到远程仓库github-maven-repository。

3、执行deploy脚本发布包,为了方便直接封装一个脚本,将该脚本复制到待发布的项目根目录,执行 ./deploy.sh s 即可,其中s表示snapshot,r表示release。

#!/bin/bash

if [ $# != 1 ];then
  echo 'deploy argument [snapshot(s for short) | release(r for short) ] needed!'
  exit 0
fi

## deploy参数,snapshot 表示快照包,简写为s, release表示正式包,简写为r
arg=$1

# 本地仓库
DEPLOY_PATH=D:\\mysoftware_notinstall\\maven-3.9\\github-maven-repository
CURRENT_PATH=`pwd`

deployFunc(){
  br=$1
  ## 快照包发布
  cd $DEPLOY_PATH
  ## 切换对应分支
  git checkout $br
  cd $CURRENT_PATH
  # 开始deploy, scl可以任意写,后面的地址为本地仓库的reposity文件夹
  mvn clean deploy  -DaltDeploymentRepository=scl::default::file:D:\\mysoftware_notinstall\\maven-3.9\\github-maven-repository\\repository

  # deploy 完成,提交
  cd $DEPLOY_PATH
  git add .
  git commit -m 'deploy'
  git push origin $br

  # 合并master分支
  git checkout master
  git merge $br
  git add .
  git commit -m 'merge'
  git push origin master
  cd $CURRENT_PATH
}

if [ $arg = 'snapshot' ] || [ $arg = 's' ];then
  ## 快照包发布
  deployFunc snapshot
elif [ $arg = 'release' ] || [ $arg = 'r' ];then
  ## 正式包发布
  deployFunc release
else
  echo 'argument should be snapshot(s for short) or release(r for short). like: `sh deploy.sh snapshot` or `sh deploy.sh s`'
fi
sleep 100000

5、测试使用,首先修改maven的settings.xml文件引入GitHub仓库地址,然后在另外一个项目的pom文件引入刚发布的jar包坐标即可。

settings.xml

  <profile>
  <repositories>
    <repository>
        <id>sichaolong-maven-repo-snap</id>
        <url>https://github.com/sichaolong/maven-repository/snap/repository</url>
    </repository>
    <repository>
        <id>sichaolong-maven-repo-release</id>
        <url>https://github.com/sichaolong/maven-repository/release/repository</url>
    </repository>
</repositories>
  </profile>

pom.xml

<!--测试发布在github仓库的jar包-->
        <dependency>
            <groupId>scl</groupId>
            <artifactId>github-maven-demo</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

二、借助Nexus Sonatype发布jar包到sonatype仓库

2.1 在Nexus Sonatype注册账号并提交工单

其实和上面GitHub的当作maven仓库原理一样,只不过GitHub是免费的公共仓库,而sonatype是一个第三方的仓库。

为什么需要Nexus Sonatype:Maven中央仓库并不支持直接发布jar包。我们需要将jar包发布到一些指定的第三方Maven仓库,然后该仓库再将jar包同步到Maven中央仓库。其中,最”简单”的方式是通过Sonatype OSSRH仓库来发布jar包。接下来,我会介绍如何将jar包发布到Sonatype OSSRH。

注册以及登录地址:https://issues.sonatype.org/login.jsp,登录之后需要提交一个issue

在这里插入图片描述

然后按照下图选择

在这里插入图片描述
接下来需要填内容审核,审核是机器做的

主要是几个地方要注意:
问题名称,只要大概表达清楚意思即可
groupId要写准确
Porject URL填写Github仓库地址
SCM url需要在Github仓库地址后带git后缀
提交后,我本来以为是人工审核,其实是全自动机器人自动回复你。它要求你证明你对groupId的网址有 所有权,比如我填写的是cn.monitor4all,那么我就要在monitor4all.cn的网站上,添加一个TXT解析,指向这个Issue(值写为OSSRH-xxxxx).
如果你是的groupId填写的是com.github.xxx,则不需要做上述的步骤。所以如果自己没有域名,或者嫌麻烦的,直接用com.github.xxx即可。

我的填写参考,这里并没使用刚才创建的仓库,而是使用一个git@github.com:sichaolong/simple-log-solution-scl.git,后续改动

在这里插入图片描述

更新:需要使用io.github.xxx,上图填写的groupid错误,注意更新完别忘记Open issue
在这里插入图片描述
然后等待即可
在这里插入图片描述

2.2 配置GPG密钥连接自己的私服、配置pom.xml和setting.xml

除了ApacheMaven安装之外,您还必须安装GPG客户端 和Maven GPG插件要求的命令行路径。更多 信息请参阅
http://www.gnupg.org/as 以及插件文档和下面。

GPG是Maven的一个工具插件,GPG是一种RSA算法的实现。主要作用是鉴权用的,sonatype既然允许你上传到公有仓库,肯定要鉴权。防止其他恶意的人上传Jar包。

我们去官网下载Windows 可视化 GunPG:https://www.gnupg.org/download/ 或者 https://gpg4win.org/get-gpg4win.html 下载安装之后生成证书,然后看到

在这里插入图片描述
点击在服务器发布,然后等待即可,然后就是配置Maven的settings.xml

<profiles>
    <profile>
      <id>ossrh</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <gpg.executable>你的gpg的可执行path</gpg.executable>
        <gpg.passphrase>你的passphrase,可以在可视化界面更改</gpg.passphrase>
      </properties>
    </profile>
  </profiles>
  
    <servers>
    <server>
      <id>ossrh</id>
      <username>你上面注册的账号</username>
      <password>你上面注册的密码</password>
    </server>
  </servers>
</settings>

接下来就是配置项目pom.xml,设计打包插件保证项目能发布到sonatype仓库

<distributionManagement>
    <!--  申明打包到sonatype公有仓库  -->
    <snapshotRepository>
        <id>ossrh</id>
        <url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
    </snapshotRepository>
</distributionManagement>

<build>
    <plugins>
        <plugin>
            <groupId>org.sonatype.plugins</groupId>
            <artifactId>nexus-staging-maven-plugin</artifactId>
            <version>1.6.7</version>
            <extensions>true</extensions>
            <configuration>
                <serverId>ossrh</serverId>
                <nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
                <autoReleaseAfterClose>true</autoReleaseAfterClose>
            </configuration>
        </plugin>
        <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>
            <configuration>
                <javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
            </configuration>
            <executions>
                <execution>
                    <id>attach-javadocs</id>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-gpg-plugin</artifactId>
            <version>1.5</version>
            <executions>
                <execution>
                    <id>sign-artifacts</id>
                    <phase>verify</phase>
                    <goals>
                        <goal>sign</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

也可以添加一下自己的信息以及LICENES

<licenses>
  <license>
    <name>The Apache Software License, Version 2.0</name>
    <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
    <distribution>actable</distribution>
  </license>
</licenses>

<developers>
  <developer>
    <name>sichaolong</name>
    <email>2589165806@qq.com</email>
    <organization>io.github.sichaolong</organization>
  </developer>
</developers>

<scm>
  <tag>master</tag>
  <url>git@github.com:sichaolong/simple-log-solution-scl.git</url>
  <connection>git@github.com:sichaolong/simple-log-solution-scl.git</connection>
  <developerConnection>git@github.com:sichaolong/simple-log-solution-scl.git</developerConnection>
</scm>

2.3 发布到Nexus Sonatype仓库

最后就是正式打包发布,执行 mvn clean deploy,等待发布上传完成即可

ps:需要注意的问题是groupId需要和上面申请的sonatype的保持一致
在这里插入图片描述

根据坐标访问sonatype仓库查看结果,位置在上文pom文件配置的路径,比如我的https://s01.oss.sonatype.org/content/repositories/snapshots/io/github/sichaolong/
在这里插入图片描述

测试使用,在另外一个项目pom导入坐标

 <!-- 测试发布在nexus-sonatype的jar包-->
        <dependency>
            <groupId>io.github.sichaolong</groupId>
            <artifactId>nexus-sonatype-maven-demo</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

三、借助Nexus Sonatype搭建自己的maven私服

如果不想使用上面的方式,而是使用公司内网或者是局域网搭建一个仓库,小范围使用,可以使用Nexus Sonatype搭建自己的maven私服。

Maven 私服的概念就是在本地架设一个 Maven 仓库服务器,在代理远程仓库的同时维护本地仓库。当我们需要下载一些构件(artifact)时,如果本地仓库没有,再去私服下载,私服没有,再去中央仓库下载。这样做会有如下一些优点:

减少网络带宽流量
加速 Maven 构建
部署第三方构件
提高稳定性、增强控制
降低中央仓库的负载

参考:https://www.hangge.com/blog/cache/detail_2844.html,https://juejin.cn/post/6844903991600480269

1、访问官网下载Nexus,地址:https://help.sonatype.com/repomanager3/product-information/download,我这里选择Windows 3.x版本的zip包。

解压后会得到两个文件夹:nexus-3.56.0-01(nexus 服务目录)、sonatype-work(私有库目录)

2、配置私服,其中 etc/nexus-default.properties 文件配置端口(默认为 8081)和 work 目录信息,我们可以按需修改。

3、启动登录,Nexus 服务启动以后,我们使用浏览器访问 http://IP:8081/,注意启动需要一管理员权限执行

C:\Windows\System32>d:\mysoftware_notinstall\nexus-3.56.0-01-win64\nexus-3.56.0-01\bin\nexus.exe /install
Installed service 'nexus'.

C:\Windows\System32>d:\mysoftware_notinstall\nexus-3.56.0-01-win64\nexus-3.56.0-01\bin\nexus.exe /start
Starting service 'nexus'.

# 等待一会即可

在这里插入图片描述

4、使用, 下面是一些概念说明,之后就可以测试使用了。

(1)默认仓库说明:

maven-central:maven 中央库,默认从 https://repo1.maven.org/maven2/ 拉取 jar
maven-releases:私库发行版 jar,初次安装请将 Deployment policy 设置为 Allow redeploy
maven-snapshots:私库快照(调试版本)jar
maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务,在本地 maven 基础配置 settings.xml 或项目 pom.xml 中使用

(2)仓库类型说明:

group:这是一个仓库聚合的概念,用户仓库地址选择 Group 的地址,即可访问 Group 中配置的,用于方便开发人员自己设定的仓库。maven-public 就是一个 Group 类型的仓库,内部设置了多个仓库,访问顺序取决于配置顺序,3.x 默认为 Releases、Snapshots、Central,当然你也可以自己设置。
hosted:私有仓库,内部项目的发布仓库,专门用来存储我们自己生成的 jar 文件
snapshots:本地项目的快照仓库
releases: 本地项目发布的正式版本
proxy:代理类型,从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的 Configuration 页签下 Remote Storage 属性的值即被代理的远程仓库的路径),如可配置阿里云 maven 仓库
central:中央仓库

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/679004.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SQL应知应会】分析函数的点点滴滴(三)

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习&#xff0c;有基础也有进阶&#xff0c;有MySQL也有Oracle 分析函数的点点滴滴 1.什么是分析函数&#xff1a;…

HDFS写流程源码分析(一)-客户端

HDFS 写流程源码分析 一、客户端&#xff08;一&#xff09;文件创建及Pipeline构建阶段&#xff08;二&#xff09;数据写入&#xff08;三&#xff09;输出流关闭 二、服务端 环境为hadoop 3.1.3 一、客户端 以下代码创建并写入文件。 public void create() throws URISynt…

计网学习记录

ps:答案可能不正确噢。 1.什么是计算机网络体系结构&#xff1f;什么是网络协议&#xff1f;协议的三要素是什么&#xff1f;每个要素的含义是什么&#xff1f; 计算机网络体系结构&#xff1a; 我看书上也没说清啊。。。 &#xff08;概念磨人啊&#xff09; 什么是计算机的…

WPF 零基础入门笔记(1):WPF静态页面,布局+样式+触发器(更新中)

文章目录 官方文档往期回顾零基础笔记项目实战&#xff08;已完结&#xff09; WPF项目创建为什么选net core版本 WPF 静态页面WPF 页面布局WPF样式 官方文档 往期回顾 零基础笔记 WPF 零基础入门笔记&#xff08;0&#xff09;&#xff1a;WPF简介 项目实战&#xff08;已…

github 代码实战pycharm

文章目录 下载代码配置环境进入环境下载数据集使用pycharm训练模型 下载代码 配置环境 conda env create -f environment.yml 进入环境 conda activate pytorch-CycleGAN-and-pix2pix 下载数据集 搜索download_pix2pix_dataset.sh然后用记事本打开&#xff0c;会发现有一个…

SpringBoot 疫苗接种管理系统 -计算机毕设 附源码83448

SpringBoot疫苗接种管理系统 摘 要 在目前的形势下&#xff0c;科技力量已成为我国的主要竞争力。而在科学技术领域&#xff0c;计算机的使用逐渐达到成熟&#xff0c;无论是从国家到企业再到家庭&#xff0c;计算机都发挥着其不可替代的作用&#xff0c;可以说计算机的可用领…

【软件架构】软件的设计图纸(用例图,类图,状态图,活动图,顺序图)

【软件架构】软件的设计图纸(用例图&#xff0c;类图&#xff0c;状态图&#xff0c;活动图&#xff0c;顺序图)_bdview的博客-CSDN博客 按图索骥---软件的设计图纸 序&#xff1a; 我一直以为&#xff0c;在软件设计中&#xff0c;各种图要比文档重要的多。图可以更加直接的…

RocketMQ 常见面试题(二)

broker如何处理拉取请求的&#xff1f; Broker处理拉取请求的具体流程如下&#xff1a; 客户端向Broker发送拉取请求&#xff0c;请求指定要拉取的主题名称和消费者组信息。 Broker首先会检查该消费者组是否已经存在&#xff0c;如果不存在则会创建该消费者组&#xff0c;并为…

Dubbox是什么,如何整合SpringBoot,有什么优势?

目录 一、Dubbox 是什么 二、Dubbox 如何整合SpringBoot 三、Dubbox 有什么优势 一、Dubbox 是什么 Dubbox是一款基于Java语言的分布式服务框架&#xff0c;是阿里巴巴公司开源的一款服务化治理框架&#xff0c;其前身为Dubbo。Dubbox是针对Dubbo进行了改进和升级&#xff…

akima 插值拟合算法 Python/C++/C版本

目录 前言Akima简介Akima优势 算法的代码实现python版C 版代码解析1代码解析2代码解析3 C版 实验对比 前言 鉴于“长沙等你”网站上Akima算法文章大部分要VIP观看或者下载&#xff0c;即使是付费也有质量不佳&#xff0c;浪费Money也浪费时间。 笔者根据查到的资料分享给大家。…

第5章 链路层

1、局域网的协议结构一般不包括&#xff08; &#xff09; A. 数据链路层B. 网络层C. 物理层D. 介质访问控制层 逻辑链路控制子层、介质访问控制子层、物理层 2、下列关于二维奇偶校验的说法&#xff0c;正确的是&#xff08; &#xff09; A. 可以检测和纠正双比特差错B…

NodeJS 了解和快速入门 - 实现 http 服务 操作 mysql

目录 1. 介绍 NodeJS 2. NodeJS 快速入门 3. NodeJS 实现 Httpserver 服务 4. NodeJS 操作 MySQL 数据库 1. 介绍 NodeJS 1. Node 是一个让 JavaScript 运行在服务端的开发平台, 它让 JavaScript成为与 PHP, Python, Perl, Ruby 等服务端语言平起平坐的脚本语言, 发布于 200…

尚硅谷大数据Flink1.17实战教程-笔记02【Flink部署】

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址&#xff1a;尚硅谷大数据Flink1.17实战教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据Flink1.17实战教程-笔记01【Flink概述、Flink快速上手】尚硅谷大数据Flink1.17实战教程-笔记02【Flink部署】尚硅谷…

VUE L 表单数据过滤器 ⑨

目录 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持✨ V u e j s Vuejs Vuejs收集表单数据过滤器 使用 C o o k i e Cookie Cookie 影响总结 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹…

如何将Springboot项目升级成Springcloud项目

本文以nacos为例 分为以下几个步骤 1. 下载nacos软件 2. pom文件配置 3. application.yml文件配置 4. 代码调用 5. 效果展示 一 . 下载nacos软件 1.1 下载nacos-server-2.2.0-BETA这个版本 1.2 修改nacos配置文件 打开bin目录下的startup.cmd&#xff0c;将第26行的 set MO…

【计算机网络】第二章 物理层(下)

文章目录 2.5 信道的极限容量2.5.1 奈氏准则2.5.2 香农公式2.5.3 练习题 2.6 章节小结2.7 章节习题 2.5 信道的极限容量 2.5.1 奈氏准则 理想低通信道的最高码元传输速率 2W Baud 2W 码元 / 秒 理想带通信道的最高码元传输速率 W Baud W 码元 / 秒 W : 信道带宽&#xff08…

OZON、雅虎自养号测评如何塑造伪装度极高的测评环境

在测评领域&#xff0c;每个卖家和工作室都深知&#xff1a;创建安全可靠的网络环境对于未来发展是至关重要的。如何打造一个伪装度极高的评测环境&#xff0c;这一问题始终困扰着许多人。 从早期的虚拟机、模拟机、云手机、VPS等系统方案成本高且成号率低。因此&#xff0c;一…

php对接微信公众号扫码登录开发实录(H5微信扫描登录、服务出现故障调试、模版消息设置、扫码轮询交互)

微信公众号扫码登录开发实录 前言一、服务器配置1.微信公众号配置2.本地服务器验证程序 二、生成登录二维码1.生成微信登录二维码2.封装成便于刷新的函数 三、扫码验证和交互四、模版消息设置五、开发中遇见的问题1.该公众号提供的服务出现故障&#xff0c;请稍后再试&#xff…

区分 scanf和printf、fscanf和fprintf、sscanf和sprintf函数

文章目录 前言scanf和printffscanf和fprintfsscanf和sprintf总结 前言 C语言中&#xff0c;许多函数的函数名过于相似&#xff0c;使用者要是不能很好地区分这些函数&#xff0c;就会造成误用&#xff0c;最终导致代码的结果大相径庭。对于scanf和printf函数、fscanf和fprintf…

Xcode 15 beta 2 (15A5161b) 发布下载 - Apple 平台 IDE (visonOS 1 beta 已发布)

Xcode 15 beta 2 (15A5161b) 发布下载 - Apple 平台 IDE (visonOS 1 beta 已发布) IDE for iOS/iPadOS/macOS/watchOS/tvOS/visonOS 此版本已加入 visonOS 支持。 请访问原文链接&#xff1a;https://sysin.org/blog/apple-xcode-15/&#xff0c;查看最新版。原创作品&#…