一、企业私有 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 父工程三大核心作用
- 聚合子模块 :执行一次
mvn package,自动打包所有子模块,无需逐个操作; - 统一依赖版本 :通过
<dependencyManagement>管控全项目依赖版本,彻底避免版本冲突; - 复用插件配置:编译、打包插件统一配置,子模块无需重复编写。
三、业务项目依赖公司私有 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」刷新依赖。
四、企业开发避坑指南
-
401/403 认证失败 原因:
settings.xml的<server>id 与pom.xml仓库 id 不一致;解决:保证两个配置的 id 完全匹配。 -
快照版本不更新 原因:Maven 本地缓存旧版本;解决:使用
mvn -U命令,或删除本地仓库~/.m2/repository/对应目录。 -
父工程报错 原因:父工程创建了
src源码目录;解决:删除源码目录,父工程仅保留pom.xml。 -
禁止使用 system 依赖不要用本地 Jar 路径引入依赖,会导致团队协作、CI/CD 部署失败,必须通过私服管理。