如何发布 Jar 包到私服

1,491 阅读3分钟

前言

事情是这样的,最近接手一个比较复杂的 Java 项目。这个项目的单元测试的数据是一个单独的 Web 服务。此服务的调用方式是 Feign + 微服务。接手的第一步就是需要补充单元测试,于是就一边写项目的单元测试,一边完善单测服务。

此时就遇到需要将单测服务的工具包更新并上传到公司的私服上。 emm 整个操作逻辑大致比较清楚,但是实操还是第一次。今天就看看如何发布 Jar 包到私服。

技术背景

  • Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
  • Nexus 是一个强大的仓库管理器,可以极大地简化了内部仓库的维护和外部仓库的访问。

下图为 Nexus 对应的功能,图片来自官网: image.png

项目实践

1. 安装 Nexus

如果公司有自己的 Nexus,可以直接跳过这一步。

我推荐使用 Docker 安装,方便、省事、快捷、跨平台。

详情见 Docker Hub

# 这里只做演示就没有指定共享目录,如果是正常情况下需要指定文件夹目录做数据的持久化
docker run -d -p 8081:8081 --name nexus3 --restart=always  sonatype/nexus3 

启动完成浏览器访问 http://localhost:8081 ,完成初始化后就可以进行后续的操作了。

注意事项:

  • 如果 http://localhost:8081/ 404,试着访问 http://localhost:8081/nexus
  • nexus 初始化密码需要进入 docker 容器中获取 docker exec nexus3 cat /nexus-data/admin.password

2. 配置 仓库

  • 2.1 为了方便管理新建 Blob Stores

image.png

  • 2.2 新建 Repositories maven2(hosted) 注意下图中的参数

image.png

  • 2.3 新建 Repositories maven2(proxy) 注意下图中的参数
# 阿里云的maven中央仓库地址
http://maven.aliyun.com/nexus/content/groups/public/

image.png

  • 2.4 新建 Repositories maven2(group) 注意下图中的参数

image.png

  • 2.5 查看结果并复制对应的地址

image.png

3. 环境配置

  • 3.1 配置 .m2/settings.xml此处的地址源于上一步的仓库地址
<?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">

  <servers>  
    <server>  
        <id>nexus</id>  
        <username>admin</username>  
        <password>admin</password>  
    </server>   
  </servers>  
  <mirrors>     
    <mirror>  
        <id>nexus</id>  
        <name>nexus respository</name>  
        <url>http://deepin:8081/repository/test_group/</url>  
        <mirrorOf>central</mirrorOf>  
    </mirror>     
  </mirrors> 
</settings>

  • 3.2 配置本地项目 pom.xml此处的地址与上一步地址保持一致
<!-- ...... -->
nexus nexus repository http://deepin:8081/repository/test_hosted/
</repository>
<snapshotRepository>
    <id>nexus</id>
    <name>nexus repository</name>
    <url>http://deepin:8081/repository/test_hosted/</url>

</snapshotRepository>
``` ```

4. 上传 Jar 包

# 本地 maven 的版本信息
$ mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/local/Cellar/maven/3.6.3_1/libexec
Java version: 14.0.1, vendor: N/A, runtime: /usr/local/Cellar/openjdk/14.0.1/libexec/openjdk.jdk/Contents/Home
Default locale: zh_CN_#Hans, platform encoding: UTF-8
OS name: "mac os x", version: "10.16", arch: "x86_64", family: "mac"

  • 方法一:Idea 中直接点击

image.png

  • 方法二:命令行
# 在项目的目录下执行
mvn deploy

查看运行结果:

image.png

5. 解决上传错误问题

  • Return code is: 401 一般是账号密码问题,需要核验账号密码是否配置正确,同时需要注意 pom.xml settings.xml 的配置。

  • Return code is: 400 nexus 的 repository 分三种类型:Hosted、Proxy、Group;部署的时候只能部署到 Hosted 类型的仓库中;需要检查所配置的仓库类型。

  • Return code is: 405 一般是发布地址有问题,检查发布地址。

这里用到 Group 将 Hosted、Proxy 打包到一起使用,一个用于管理上传的 Jar 包,一个用于管理 代理的 Jar包。

下图为上传后的 Jar 包: image.png

下图为代理后下载的 Jar 包:

image.png

6. 其他

因为 Nexus 支持多种仓库的设置,后续可以建立自己的 Docker、Pypi、Npm 仓库,有兴趣的小伙伴可以自行研究。

参考资料