deploy和手动上传jar包至nexus

本文介绍了Nexus私服的两大用途:手动上传第三方jar包及通过Maven工程部署项目产生的jar包。文章详细解释了如何配置POM文件和settings.xml文件,并区分了快照仓库和正式仓库的不同应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、nexus的好处

       Maven默认提供的中央仓库是在远程网络服务Appache提供的,这对于我们开发时不合理的。如果我们没网了或者什么情况,我们怎么办?我们需要的jar包中央库没有或者是要收费怎么办?也就是说我们队中央仓库的依赖性太大。而Nexus私服则可以解决我们这个问题。

        这样就相当于在我们本地的局域网搭建了一个类似中央仓库的服务器,我们开始将中央仓库的一些资料下载到私服务器上,然后平时我们的maven项目就是直接访问局域网内的私服即可,既节省了网络带宽也会加速项目搭建的进程,这样对我们开发来说,对公司来说都是非常好的选择。项目内部和项目与项目之间也可以共享jar包,达到代码的最大化利用。

一般有两种情况需要我们上传jar包至nexus,一个是本地项目生成的jar包,另一个是我们从第三方拿过来的的中央库中不存在的jar包,前者采用maven工程deploy的方法,后者采用手动上传的方式。

二、手动上传jar包

对于一些第三方jar包,在maven中央库中下载不到的,我们可以手动上传至nexus库中。

首先登陆nexus,进入3rd party,选择Artifact Upload,如图:

nexus提供了两种上传jar到私服的方式From POM和GAV Parameters。
From POM方式使用场景:上传的jar还依赖别的jar时,如何把jar和他的依赖一起传到私服。例如:我们想传a.jar到私服,但是a.jar还依赖b.jar,假如只传a.jar到私服,在项目中会因为找不到a.jar的依赖(b.jar)而报错。
使用参考链接:https://blog.youkuaiyun.com/wabiaozia/article/details/76098727

本项目还未使用到From POM的方式,所以只介绍GAV Parameters方式。

示例中使用的jar包为:geogson.jar包,基本信息:

<dependency>
  <groupId>com.nsn.geogson</groupId>
  <artifactId>geogson</artifactId>
  <version>1.0.0</version>
</dependency>


导入成功后,search该包显示如下:

在本地工程中加入本项目依赖,会自动下载jar包至本地maven仓库文件夹中。

三、deploy jar至nexus库

工程pom文件中,配置发布构件的基本信息:

 maven中的仓库分为两种,snapshot快照仓库和release发布仓库。snapshot快照仓库用于保存开发过程中的不稳定版本,release正式仓库则是用来保存稳定的发行版本。定义一个组件/模块为快照版本,只需要在pom文件中在该模块的版本号后加上-SNAPSHOT即可(注意这里必须是大写),如下:

<groupId>cc.mzone</groupId>
<artifactId>m1</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>jar</packaging>

 maven会根据模块的版本号(pom文件中的version)中是否带有-SNAPSHOT来判断是快照版本还是正式版本。如果是快照版本,那么在mvn deploy时会自动发布到快照版本库中,而使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。如果是正式发布版本,那么在mvn deploy时会自动发布到正式版本库中,而使用正式版本的模块,在不更改版本号的情况下,编译打包时如果本地已经存在该版本的模块则不会主动去镜像服务器上下载。

配置deploy的地址:

 <!-- 设置deploy的地址 -->
    <distributionManagement>
        <repository>
            <id>release</id>                    <!--库的ID-->
            <name>user release resp</name>   <!--库的名字-->
            <url>http://192.168.1.11:9083/nexus/content/repositories/releases/</url>
        </repository>

        <snapshotRepository>
            <id>snapshots</id>
            <name>user snapshot</name>
            <url>http://192.168.1.11:9083/nexus/content/repositories/snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

distributionManagement配置参考:     https://blog.youkuaiyun.com/yeguxin/article/details/77110622

<distributionManagement> 中的 <repository> && <snapshotsrepository>各自的含义

  • maven仓库分为两种 release发布仓库(<repository>) 和 snapshot快照仓库(<snapshotsrepository>)
  • snapshot快照仓库用于保存开发过程中的不稳定版本
  • release正式仓库用来保存稳定的发行版本
  • 定义一个组件/模块为快照版本  只需要在pom文件中的该模板的版本号后面加上 -SNAPSHOT就可以了.  注意:必须是大写
  • maven会根据模块的版本号(pom文件中的<version>版本号</version>)中是否带有-SNAPSHOT来判断这个是快照版本还是正式版本.
  • 如果是快照版本:
  • 在mvn deploy时会自动发布到快照版本库中.
  • 而使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本
  • 如果是正式发布版本:

  • 那么在mvn deploy时会自动发布到正式版本库中,
  • 而使用正式版本的模块,在不更改版本号的情况下,编译打包时,如果本地已经存在该版本的模块则使用本地的而不是主动去镜像服务器上下载

本地maven文件夹conf目录下,setting.xml文件中配置nexus的账号和密码:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!--设置自己的maven本地仓库-->
<localRepository>D:\maven\repo</localRepository>

    <pluginGroups/>
    <proxies/>
    <servers> 
      <server> 
        <id>central</id> <!--这个ID要与下面的repository中的ID一致-->
        <username>dev</username> <!--nexus中配置的用户名密码-->
        <password>dev123</password> 
      </server> 
      <server> 
        <id>snapshots</id> 
        <username>dev</username> 
        <password>dev123</password> 
      </server> 
      <server> 
        <id>releases</id> 
        <username>dev</username> 
        <password>dev123</password> 
      </server> 
    </servers>
    <mirrors><!--从nexus下载依赖地址-->
        <mirror>
            <id>nexus-public</id>
            <mirrorOf>central</mirrorOf>
            <name>central repository</name>
            <url>http://192.168.1.11:9083/nexus/content/groups/public/</url>
        </mirror>
    </mirrors>

    <profiles>
        <profile> 
            <id>nexus</id> 
            <repositories> 
                <repository> 
                    <id>central</id> <!--正式仓库id-->
                    <!--name随便-->
                    <name>Nexus Release Snapshot Repository</name> 
                    <!--地址是nexus中repository(Releases/Snapshots)中对应的地址-->
                    <url>http://192.168.1.11:9083/nexus/content/repositories/releases</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases> 
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots> 
                </repository>

                <repository>
                    <id>snapshots</id>
                    <url>http://192.168.1.11:9083/nexus/content/repositories/snapshots</url>
                    <releases><enabled>true</enabled></releases>
                    <snapshots><enabled>true</enabled></snapshots>
                </repository>

            </repositories> 
            <pluginRepositories> <!--插件仓库地址,各节点的含义和上面是一样的-->
                <pluginRepository> 
                    <id>central</id> 
                    <name>Nexus Release Snapshot Repository</name> 
                    <url>http://192.168.1.11:9083/nexus/content/repositories/releases</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases> 
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </pluginRepository> 
                <pluginRepository> 
                    <id>snapshots</id>
                    <url>http://192.168.1.11:9083/nexus/content/repositories/snapshots</url>
                    <releases><enabled>true</enabled></releases>
                    <snapshots><enabled>true</enabled></snapshots>
                </pluginRepository> 
            </pluginRepositories> 
        </profile>
       </profiles>
    <!--激活配置-->
    <activeProfiles>
        <activeProfile>nexus</activeProfile> <!--profile下的id-->
    </activeProfiles>
</settings>

需要注意的是,settings.xml中server元素下id的值必须与POM中repository或snapshotRepository下id的值完全一致。maven在处理发布时会根据id查找用户名称和密码进行登录和文件的上传发布。

最后点击deploy即可发布。

### 如何使用 Nexus Repository Manager 上传 JAR #### 使用 Maven 命令行工具上传 JAR 可以通过 `mvn` 工具来完成 JAR 文件的上传操作。以下是具体方法: 1. **准备必要的参数** 需要提供以下信息以便执行命令: - groupId:项目的唯一标识符。 - artifactId:模块名称或组件名称。 - version:版本号。 - packaging:打类型(通常为 jar)。 - file:本地 JAR 文件路径。 - url:Nexus 私服仓库 URL 地址。 - repositoryId:远程仓库 ID。 2. **运行 Maven 命令** 执行如下命令即可将指定的 JAR 文件部署到 Nexus 中: ```bash mvn deploy:deploy-file \ -DgroupId=cn.senseinfo.external \ -DartifactId=senseinfo-external-sdk \ -Dversion=1.0 \ -Dpackaging=jar \ -Dfile=C:\\Users\\liquan\\git\\liquan_message\\jar\\senseinfo-external-sdk-1.0.jar \ -Durl=http://nexus.xianjinxia.com:8081/repository/maven-releases/ \ -DrepositoryId=nexus-releases \ -DgeneratePom=true ``` 上述命令会将位于 C:\Users\liquan\git\liquan_message\jar\senseinfo-external-sdk-1.0.jar 的文件上传至 http://nexus.xianjinxia.com:8081/repository/maven-releases/ 路径下的 releases 库中[^3]。 3. **验证上传成功与否** 登录到 Nexus Repository Manager Web 控制台,导航至目标仓库并确认新上传JAR 是否可见。如果一切正常,则说明已成功完成上传过程。 #### 直接通过 Nexus UI 进行手动上传 对于某些场景下无法借助脚本自动化实现的情况,也可以采用图形界面的方式来进行单次的手动导入工作流: 1. 访问 Nexus 官方网站登录页面后进入管理后台; 2. 寻找对应的目标存储库位置点击浏览按钮查看其目录结构; 3. 利用界面上提供的功能选项卡选择“Upload Items”,按照提示逐步填写所需字段值直至提交完毕为止[^2]。 以上两种途径均能有效达成向私有 Maven 服务器推送自定义编译产物的目的,并且各有优劣之处需视实际需求而定选用合适的方法实施操作。 ```python # 示例 Python 脚本用于模拟调用外部程序执行上述命令 import subprocess command = [ 'mvn', 'deploy:deploy-file', '-DgroupId=cn.example.group', '-DartifactId=my-artifact-id', '-Dversion=1.0-SNAPSHOT', '-Dpackaging=jar', '-Dfile=path/to/my-jar-with-dependencies.jar', '-Durl=http://your-nexus-server/repository/maven-snapshots/', '-DrepositoryId=nexus' ] subprocess.run(command, check=True) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值