Maven学习1

news2025/3/1 22:11:21

概述

主要学习记录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/。

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/678000.html

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

相关文章

0基础学习地平线QAT量化感知训练

文章目录 1. 背景2. 基础理论知识3. 文件准备与程序运行4. 代码详解4.1 导入必要依赖4.2 主函数4.3 构建fx模式所需要的float_model4.4 不同阶段模型的获取4.5 定义常规模型训练与验证的函数4.6 float与qat训练代码解读——float_model/qat_model4.7 模型校准部分的代码解读——…

day58_LayUI

Layui 一、介绍 layui&#xff08;谐音&#xff1a;类 UI) 是一套开源的Web UI解决方案&#xff0c;采用自身经典的模块化规范&#xff0c;并遵循原生HTML/CSS/JS的开发方式&#xff0c;常适合网页界面的快速开发。layui 区别于那些基于MVVM 底层的前端框架&#xff0c;它更多…

2020新基建决赛-misc-ezPIC

2020新基建决赛-misc-ezPIC 一、概要 1、标题&#xff1a;ezPIC 2、关键字&#xff1a;盲水印、png宽高 3、比赛&#xff1a;2020新基建决赛 4、工具&#xff1a;python、010editor 二、开始 1、题目分析 在此感谢csdn上星辰之门和零食商人两位大佬给出的解题思路。 题目解…

黑马头条-day02

文章目录 前言一、文章列表加载1.1 需求分析1.2 表结构分析1.3 导入文章数据库1.4 实现思路1.5 接口定义1.6 功能实现 二、freemarker2.1 freemarker简介2.2 环境搭建&&快速入门2.2.1 创建测试工程 2.3 freemarker基础2.3.1 基础语法种类2.3.2 集合指令2.3.3 if指令2.3…

#10036. 「一本通 2.1 练习 2」Seek the Name, Seek the Fame

字符串的题真的要比dfs&#xff0c;bfs的简单好多 大致思路 首先&#xff0c;再度重复哈希函数 H ( C ′ ) H ( C , k n ) − H ( C , k ) ∗ b n H(C)H(C,kn)-H(C,k)*b^n H(C′)H(C,kn)−H(C,k)∗bn具体模板详见我的上几篇题解 哈希函数模板对此题&#xff0c;我们只需要对…

RPC 框架架构设计

RPC 框架架构设计 RPC 又称远程过程调用&#xff08;Remote Procedure Call&#xff09;&#xff0c;用于解决分布式系统中服务之间的调用问题。通俗地讲&#xff0c;就是开发者能够像调用本地方法一样调用远程的服务。下面我们通过一幅图来说说 RPC 框架的基本架构。 RPC 框架…

(二)WPF - 应用程序

一、运行程序的过程&#xff1a; &#xff08;1&#xff09; Application 对象被构造出来。&#xff08;2&#xff09;Run方法被调用。&#xff08;3&#xff09;Application.Startup 事件被触发&#xff08;4&#xff09;用户代码构造一个或多个 Window 对象。&#xff08;5&…

Hibernate知识总结

关于Hibernate映射 关于Hibernate的映射要说明的一点就是关于ID的访问权限&#xff0c;property以及field的区别。以前使用的时候根本没有注意过这个问题&#xff0c;这里简单的强调一下。 表的主键在内存中对应一个OID对象描述标识符&#xff0c;需要在xml的配置文件中要指定对…

数据结构——队列的实现

队列&#xff0c;又称为伫列&#xff08;queue&#xff09;&#xff0c;计算机科学中的一种抽象资料类型&#xff0c;是先进先出&#xff08;FIFO, First-In-First-Out&#xff09;的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端&#xff08;称为rear&…

Hadoop 集群如何升级?

前言 本文隶属于专栏《大数据技术体系》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见大数据技术体系 正文 升级 Hadoop 集群需要细致的规划&#xff0c;特…

Web安全——JavaScript基础

JavaScript基础 一、概述二、嵌入方法1、内嵌式2、外链式3、行内式 三、语句四、注释五、变量六、JavaScript 保留关键字七、JavaScript 作用域1、JavaScript 局部变量2、JavaScript 全局变量 八、数据类型1、判断类型2、数字类型&#xff08;Number&#xff09;3、字符串型&am…

windows第三大结构体--KPCR

前面我们介绍了windows的两大结构体&#xff0c;一个是进程结构体&#xff0c;一个是线程结构体。那么第三个就是KPCR。KPCR是什么呢&#xff0c;是用于描述CPU的结构体。每一个CPU都有一个这样的结构体来描述CPU干了什么事。 1.在当线程切换的时候&#xff0c;也就是线程从3环…

Windows和Linux动态注入

摘要&#xff1a;最近对动态注入有一些兴趣因此搜索了些资料&#xff0c;简单整理了下相关的技术实现。本文只能够带你理解何如注入以及大概如何实现&#xff0c;对注入的方法描述的并不详细。   关键字&#xff1a;dll注入&#xff0c;hook&#xff0c;提权   读者须知&am…

hadoop -- Yarn资源管理

Yarn YARN被设计用以解决以往架构的需求和缺陷的资源管理和调度软件。 Apache Hadoop YARN &#xff08;Yet Another Resource Negotiator&#xff0c;另一种资源协调者&#xff09;是一种新的 Hadoop 资源管理器&#xff0c;它是一个通用资源管理系统和调度平台&#xff0c;可…

基于uprobe的调试调优浅析

uprobe与krobe对应&#xff0c;动态附加到用户态调用函数的切入点称为uprobe&#xff0c;相比如kprobe 内核函数的稳定性&#xff0c;uprobe 的函数由开发者定义。uprobe是用户态的探针&#xff0c;它和kprobe是相对应的&#xff0c;kprobe是内核态的探针。uprobe需要制定用户态…

深度学习模型压缩方法综述

深度学习因其计算复杂度或参数冗余,在一些场景和设备上限制了相应的模型部署,需要借助模型压缩、系统优化加速等方法突破瓶颈,本文主要介绍模型压缩的各种方法,希望对大家有帮助。 1,模型压缩技术概述 我们知道,一定程度上,网络越深,参数越多,模型也会越复杂,但其最终…

基于Smb协议实现网络文件传输

文章目录 什么是SMB协议SMB与CIFS区别为什么要使用SMB如何对接SMB服务如何用Java实现Smb文件传输SmbV1的实现基于SmbV1的文件上传基于SmbV1的文件下载基于SmbV1的文件重命名基于SmbV1的文件删除基于SmbV1的文件查询 SmbV2的实现基于SmbV2的文件上传基于SmbV2的文件下载基于SmbV…

面向开发人员的 ChatGPT 提示词教程中文版 - ChatGPT 版

面向开发人员的 ChatGPT 提示词教程中文版 - ChatGPT 版 1. 指南1-1. 提示的指南1-2. 配置1-3. 提示语原则原则 1: 写出清晰而具体的指示技巧 1: 使用分隔符来清楚地表明输入的不同部分技巧 2: 要求提供结构化的输出技巧 3: 要求模型检查条件是否得到满足技巧 4: "少许样本…

QML Canvas 元素(绘制文本)

关于 QML Canvas,我们已经学习了如何绘制基本图形、应用样式和颜色、绘制图像等,现在来看一下如何在 Canvas 中绘制文本。 Canvas 提供了两种方式来渲染文本: fillText(text, x, y) 在指定的 (x,y) 位置填充指定的文本 strokeText(text, x, y) 在指定的 (x,y) 位置绘制文本…

基于t分布变异自适应的改进的黏菌算法(TSMA)

目录 一、基于t分布的自适应黏菌优化算法TSAM 1.1 自适应t分布变异 1.2 建立基于t分布的自适应黏菌优化算法TSAM 二、TSMA伪码表示如下&#xff1a; 三、改进对比 黏菌优化算法灵感来自于黏菌的扩张和觅食行为。主要模拟了黏菌在觅食过程中的行为和形态变化&#xff0c;没…