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

这篇具有很好参考价值的文章主要介绍了Maven学习1_将项目打包jar然后上传到GitHub、Nexus Sonatype仓库、搭建Sonatype私服。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

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

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

然后按照下图选择

Maven学习1_将项目打包jar然后上传到GitHub、Nexus Sonatype仓库、搭建Sonatype私服,others,maven,github,nexus,私服,sonatype
接下来需要填内容审核,审核是机器做的

主要是几个地方要注意:
问题名称,只要大概表达清楚意思即可
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,后续改动

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

更新:需要使用io.github.xxx,上图填写的groupid错误,注意更新完别忘记Open issue
Maven学习1_将项目打包jar然后上传到GitHub、Nexus Sonatype仓库、搭建Sonatype私服,others,maven,github,nexus,私服,sonatype
然后等待即可
Maven学习1_将项目打包jar然后上传到GitHub、Nexus Sonatype仓库、搭建Sonatype私服,others,maven,github,nexus,私服,sonatype

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学习1_将项目打包jar然后上传到GitHub、Nexus Sonatype仓库、搭建Sonatype私服,others,maven,github,nexus,私服,sonatype
点击在服务器发布,然后等待即可,然后就是配置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的保持一致
Maven学习1_将项目打包jar然后上传到GitHub、Nexus Sonatype仓库、搭建Sonatype私服,others,maven,github,nexus,私服,sonatype

根据坐标访问sonatype仓库查看结果,位置在上文pom文件配置的路径,比如我的https://s01.oss.sonatype.org/content/repositories/snapshots/io/github/sichaolong/
Maven学习1_将项目打包jar然后上传到GitHub、Nexus Sonatype仓库、搭建Sonatype私服,others,maven,github,nexus,私服,sonatype

测试使用,在另外一个项目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'.

# 等待一会即可

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

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:中央仓库

Maven学习1_将项目打包jar然后上传到GitHub、Nexus Sonatype仓库、搭建Sonatype私服,others,maven,github,nexus,私服,sonatype文章来源地址https://www.toymoban.com/news/detail-553687.html

到了这里,关于Maven学习1_将项目打包jar然后上传到GitHub、Nexus Sonatype仓库、搭建Sonatype私服的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Maven的三种项目打包方式——pom,jar,war的区别

    记录一次项目启动失败,发现Could not resolve dependencies for project的错误,原因是我的子模块的打包方式是pom 是怎么发现,因为我是从父模块打包的,但是发现我这个子模块找不到,我发现父子模块依赖关系也没错啊,我就单独打包这个子模块,结果没有错误,但是没生成targe

    2024年02月12日
    浏览(10)
  • Maven 配置本地jar,通过下载第三方jar包,然后手动配置maven jar包依赖 例如:IKExpression

    Maven 配置本地jar,通过下载第三方jar包,然后手动配置maven jar包依赖 例如:IKExpression

    说明:有时候有一些jar包 maven中央仓库和阿里云仓库没有收录的jar包需要手动下载至本地进行手动添加maven依赖,就拿 IK表达式 IKExpression jar 包来说 第一步 下载IKExpression 包 没有这个包的同学可以点击下载阿里云盘分享   第二步 找到自己项目本地maven仓库位置,如果不清楚可

    2024年02月12日
    浏览(10)
  • Nexus如何导入jar以及批量导入Maven的本地库目录

    Nexus如何导入jar以及批量导入Maven的本地库目录

    本篇基于 Nexus 的版本是 nexus-3.55.0-01 本方法适用Linux和Windows Windows 需要安装Git , 使用Git Bash执行 上传依赖包到Nexus 服务器的方式有多种, 包含: 单个jar上传: 在Nexus管理台页面上传单个jar 源码编译上传: 在源码项目中使用 Maven的deploy 命令发布 使用脚本批量上传Maven本地库

    2024年01月24日
    浏览(14)
  • 外部配置文件和Class打包到jar 然后重新启动java -jar

    我这边以demo.jar和application-dev.properties配置文件为例 一.将Test1.class和Test2.class替换到jar内部 步骤1:解压原始demo.jar 将两个class文件拷贝到jar目录下后cd到文件目录执行: 步骤2:替换或添加class文件 步骤3:重新打包jar 二、优先加载外部的配置文件application-dev.properties,启动ja

    2024年01月19日
    浏览(11)
  • 【GitHub】Pycharm本地项目打包上传到Github仓库的操作步骤

    【GitHub】Pycharm本地项目打包上传到Github仓库的操作步骤

    通过 Ctrl+Alt+S 快捷组合键的方式,打开 设置 ,导航到版本控制一栏中的 Git ,在Git可执行文件路径中,输入 Git.exe 。 按照此顺序,依次点击,完成测试。输出如图标④的结果,即可完成测试。 输出此结果,配置Git成功,如本地未安装Git,需自行安装。 此栏中不输入任何配置

    2024年02月12日
    浏览(11)
  • 使用Python批量上传本地maven库到nexus

    背景:外包类项目开发时是调用的公司maven仓库进行开发,交付后需要将maven仓库转移到客户环境。 原理:1、打开idea运行源代码,将maven包下载到本地仓库,            2、下载包所在目录中执行脚本将本地仓库的maven包上传到客户nexus 脚本代码如下:

    2024年01月16日
    浏览(11)
  • 【Java用法】windows10系统下修改jar中的文件并重新打包成jar文件然后运行

    【Java用法】windows10系统下修改jar中的文件并重新打包成jar文件然后运行

    测试环境(Linux)的代码(jar包)拉取到本地电脑(Windows10),然后连接本地电脑上的数据库并在本地电脑运行。 前提:Windows10电脑,jar包文件,本地电脑已安装好MySQL数据库。 需求:需要将下面jar包中配置文件的数据库连接地址修改成本地电脑连接地址,并把修改后的配置

    2024年02月12日
    浏览(11)
  • Maven进阶2 -- 私服(Nexus)、私服仓库分类、资源上传和下载

    Maven进阶2 -- 私服(Nexus)、私服仓库分类、资源上传和下载

    目录 私服是一台独立的服务器,用于解决团队内部的资源共享与资源同步问题。 Nexus 是sonatype公司的一款maven私服产品。 下载地址 启动 访问 登录   本地仓库上传和访问资源需要进行 配置 。 ①创建两个仓库demo-snapshot和demo-release   ②配置访问私服的权限 ③配置私服访问路

    2024年02月13日
    浏览(31)
  • Nexus私服,使用Maven上传到仓库时提示xx/metadata.xml响应码 502

            宝塔、使用宝塔环境安装的Nginx、使用Nginx转发到Nexus。     Nginx转发时,Nexus响应错误码为404,但是Nginx返回给客户端的响应码是502。     * 如果响应码是404则表示没有,Maven会按照服务器端没有依赖库处理,但是返回的502表示服务器错误maven则不再继续向后处理。     

    2024年02月21日
    浏览(10)
  • Maven发布项目到Nexus私服

    Maven发布项目到Nexus私服

    在项目pom.xml中文件中的仓库配置,Nexus私服如何搭建在这里不介绍了可自行百度。 在maven的settings.xml文件中添加服务器配置,仓库id、用户名和密码,id需要与上面pom.xml中的仓库id一致,两个密码都是nexus登录密码。 再执行mvn deploy,也可以直接使用idea执行。

    2024年02月14日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包