Maven 内部 Jar 包私服部署 + 多模块父工程核心配置

一、企业私有 Jar 包:上传远程 Maven 私服全流程

本文以公司内部工具包jehoho-base:1.0.0-SNAPSHOT为例,该 Jar 包未上传至 Maven 中央仓库,必须通过企业私服管理。

1.1 核心概念

  • SNAPSHOT 快照版本1.0.0-20260410.081827-65 是 Maven 自动生成的快照版本,支持开发阶段频繁更新覆盖;
  • Release 正式版本 :无SNAPSHOT后缀,用于生产环境,禁止重复上传;
  • Nexus 私服:企业内部 Maven 仓库,统一管理私有 / 第三方依赖。

1.2 方式 1:源码项目一键部署(推荐)

适用于jehoho-base有完整源码的场景,通过 Maven 命令自动打包上传。

步骤 1:配置私服账号密码(Maven 全局配置)

修改本地 Maven 的settings.xml添加私服认证:

复制代码
<settings>
  <servers>
    <!-- 快照仓库认证:id必须与pom.xml一致 -->
    <server>
      <id>nexus-snapshots</id>
      <username>你的私服账号</username>
      <password>你的私服密码</password>
    </server>
    <!-- 正式版本仓库认证 -->
    <server>
      <id>nexus-releases</id>
      <username>你的私服账号</username>
      <password>你的私服密码</password>
    </server>
  </servers>
</settings>
步骤 2:配置上传地址(项目 pom.xml)

jehoho-base项目的pom.xml中,指定私服部署地址:

复制代码
<project>
    <!-- 项目坐标:唯一标识,供其他项目依赖 -->
    <groupId>com.jehojeho</groupId>
    <artifactId>jehoho-base</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <!-- 私服上传配置 -->
    <distributionManagement>
        <!-- 正式版本仓库 -->
        <repository>
            <id>nexus-releases</id>
            <url>http://nexus.公司域名.com/repository/maven-releases/</url>
        </repository>
        <!-- 快照版本仓库 -->
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <url>http://nexus.公司域名.com/repository/maven-snapshots/</url>
        </snapshotRepository>
    </distributionManagement>
</project>
步骤 3:执行部署命令

在项目根目录执行命令,自动清理、打包、上传至私服

复制代码
mvn clean deploy

执行成功后,私服会自动生成带时间戳的快照版本(1.0.0-20260410.081827-65)。

1.3 方式 2:无源码手动上传 Jar 包

若只有编译好的jehoho-base.jar,无源码,使用 Maven 手动上传命令:

复制代码
mvn deploy:deploy-file \
-DgroupId=com.jehojeho \
-DartifactId=jehoho-base \
-Dversion=1.0.0-SNAPSHOT \
-Dpackaging=jar \
-Dfile=本地Jar包绝对路径 \
-Durl=http://nexus.公司域名.com/repository/maven-snapshots/ \
-DrepositoryId=nexus-snapshots

关键:-DrepositoryId 必须与settings.xml<server>id完全一致。


二、Maven 多模块核心:<packaging>pom</packaging> 深度解析

在微服务项目中,你一定会看到这样的配置:

复制代码
<artifactId>order-service</artifactId>
<packaging>pom</packaging>

这是Maven 父工程 / 聚合工程 的标准配置,本文结合订单服务order-service彻底讲透。

2.1 核心定义

<packaging>pom</packaging> 表示:该项目是纯管理工程,不编写业务代码、不生成 Jar/War 包,仅用于管理子模块、统一依赖版本、复用插件配置

2.2 Maven 打包类型对比

表格

打包类型 用途 生成产物 是否包含业务代码
jar(默认) 业务子模块 可执行 Jar 包 ✅ 是
war Web 项目 War 包(Tomcat 部署) ✅ 是
pom 父工程 / 聚合工程 ❌ 否(仅管理)

2.3 企业级多模块项目结构

order-service订单服务为例,标准微服务多模块架构:

复制代码
order-service (pom 父工程)
├── order-service-api (jar)    // 接口定义层
├── order-service-service (jar) // 业务逻辑层
├── order-service-dao (jar)    // 数据访问层
└── order-service-common (jar)  // 公共工具层

2.4 父工程pom.xml核心配置

order-service父工程仅保留pom.xml,无src源码目录,核心配置如下:

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- 父工程坐标 -->
    <groupId>com.jehojeho</groupId>
    <artifactId>order-service</artifactId>
    <version>1.0.0</version>
    <!-- 核心:纯管理工程 -->
    <packaging>pom</packaging>

    <!-- 1. 聚合所有子模块 -->
    <modules>
        <module>order-service-api</module>
        <module>order-service-service</module>
        <module>order-service-dao</module>
        <module>order-service-common</module>
    </modules>

    <!-- 2. 统一管理依赖版本(子模块无需写版本号) -->
    <dependencyManagement>
        <dependencies>
            <!-- 引入公司私有Jar包,统一版本 -->
            <dependency>
                <groupId>com.jehojeho</groupId>
                <artifactId>jehoho-base</artifactId>
                <version>1.0.0-SNAPSHOT</version>
            </dependency>
            <!-- 其他第三方依赖版本管理 -->
        </dependencies>
    </dependencyManagement>

    <!-- 3. 统一插件配置,子模块自动继承 -->
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

2.5 父工程三大核心作用

  1. 聚合子模块 :执行一次mvn package,自动打包所有子模块,无需逐个操作;
  2. 统一依赖版本 :通过<dependencyManagement>管控全项目依赖版本,彻底避免版本冲突;
  3. 复用插件配置:编译、打包插件统一配置,子模块无需重复编写。

三、业务项目依赖公司私有 Jar 包实战

私服上传完成后,业务模块(如order-service-common)即可依赖jehoho-base,全流程如下:

3.1 配置私服仓库(子模块 pom.xml)

让 Maven 从公司私服拉取依赖,而非中央仓库:

复制代码
<repositories>
    <!-- 快照版本仓库 -->
    <repository>
        <id>nexus-snapshots</id>
        <url>http://nexus.公司域名.com/repository/maven-snapshots/</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
    <!-- 正式版本仓库 -->
    <repository>
        <id>nexus-releases</id>
        <url>http://nexus.公司域名.com/repository/maven-releases/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
    </repository>
</repositories>

3.2 引入私有 Jar 依赖

因为父工程已统一管理版本,子模块直接引入坐标无需写版本号

复制代码
<dependencies>
    <!-- 依赖公司内部基础包 -->
    <dependency>
        <groupId>com.jehojeho</groupId>
        <artifactId>jehoho-base</artifactId>
    </dependency>
</dependencies>

3.3 刷新依赖(强制更新快照)

快照版本默认每天更新一次,添加-U参数强制拉取最新版本:

复制代码
mvn clean compile -U

IDE(IDEA)可直接点击「Reload All Maven Projects」刷新依赖。


四、企业开发避坑指南

  1. 401/403 认证失败 原因:settings.xml<server> id 与pom.xml仓库 id 不一致;解决:保证两个配置的 id 完全匹配。

  2. 快照版本不更新 原因:Maven 本地缓存旧版本;解决:使用mvn -U命令,或删除本地仓库~/.m2/repository/对应目录

  3. 父工程报错 原因:父工程创建了src源码目录;解决:删除源码目录,父工程仅保留pom.xml

  4. 禁止使用 system 依赖不要用本地 Jar 路径引入依赖,会导致团队协作、CI/CD 部署失败,必须通过私服管理。

相关推荐
从零开始的-CodeNinja之路2 小时前
【Redis】Redis 缓存应用、淘汰机制—(四)
java·redis·缓存
程序员张32 小时前
自定义跨字段校验必填注解
java·后端
weixin_704266052 小时前
手机体检预约系统开发解析
java·开发语言
白露与泡影2 小时前
Java八股文大全(2026最新版)大厂面试题附答案详解
java·开发语言
那个失眠的夜2 小时前
Spring 的纯注解配置
xml·java·数据库·后端·spring·junit
ffqws_2 小时前
Spring Boot:用JWT令牌和拦截器实现登录认证(含测试过程和关键注解讲解)
java·spring boot·后端
小兔崽子去哪了3 小时前
华为 IODT 设备接入
java·华为
摇滚侠3 小时前
Groovy 如何给集合中添加元素
java·开发语言·windows·python
无巧不成书02183 小时前
Java异常体系与处理全解:核心原理、实战用法、避坑指南
java·开发语言·异常处理·java异常处理体系