Maven(项目管理工具)
1. Maven 的概念
1.1. 什么是 Maven
翻译风格提示: “专家 / 内行”
Maven 是一个跨平台的项目管理与构建自动化工具,主要用于基于 Java 平台的项目。它覆盖**构建(compile/package)、依赖管理(dependency management)以及项目信息管理(POM: Project Object Model)**等。Maven 通过约定(convention)和生命周期(lifecycle)把构建过程标准化,并提供与远程/本地仓库的集成以自动解析依赖。
什么是理想的项目构建?
-
高度自动化:减少手工步骤,一条命令完成多步任务。
-
跨平台:在不同操作系统/环境结果一致。
-
可重用的组件:模块化构建、共享 jar。
-
标准化:统一目录结构和构建过程,便于团队协作。
什么是依赖?为什么要进行依赖管理?
-
依赖(dependency):项目在编译/运行/测试时需要的外部库或其他模块(例如:第三方 jar、本团队的其他模块 jar)。
-
为什么管理依赖:自动下载所需库、统一版本控制、解决传递依赖冲突、便于模块互引用与复用。
-
示例:A 依赖于 B,B 依赖于 C。Maven 会通过传递依赖机制保证 A 构建时同时获取到 B 和 C。
-
好处:减少手动下载、保证构建环境一致。
-
有哪些项目信息?
POM(pom.xml)中常见信息:项目坐标(groupId / artifactId / version)、项目名称与描述、开发者信息、许可证、依赖声明、构建插件与配置、仓库配置、模块列表等。
1.2. 什么是依赖管理
依赖管理即对项目所需的第三方包或内部模块进行声明与管理:
-
第三方依赖:通过配置 groupId/artifactId/version 自动从远程仓库下载 jar 到本地仓库使用。
-
本项目模块依赖:同样使用依赖声明(如果模块已安装到本地仓库或发布到私服),可以像引用第三方包一样引用自己的模块 jar,支持模块化开发。
1.3. 什么是项目构建
项目构建:把源代码转换为可执行/可部署产物(编译 → 测试 → 报告 → 打包 → 部署)的整个流程。
两种构建方式对比:
-
传统方式(手工/IDE):在 IDEA/Eclipse 中手动编写、编译、运行、用 JUnit 运行测试、手动打 war,部署到 Tomcat。步骤分散、依赖个人 IDE 配置。
-
Maven 方式:把构建过程标准化、阶段化(lifecycle),通过命令一键执行各阶段。常见阶段示例:
clean→compile→test→package→install→deploy。-
例如:
mvn clean package会依次执行清理、编译、测试、打包。 -
好处:自动化、可复现、适合团队协作、降低环境差异导致的问题。
-
1.4. Maven 的应用场景
-
团队开发中统一构建流程(CI/CD 前提)。
-
多模块项目的依赖管理与模块打包。
-
在测试/持续集成服务器上拉取源码并通过 Maven 自动完成构建、测试与部署。
-
Java Web、Java Library、插件开发等场景均适用(通过不同 packaging 与插件配置)。
1.5. 为什么使用 Maven(与 IDE / Ant 对比)
与纯 IDE(Eclipse/IDEA)相比:
-
IDE 操作多且不一致;Maven 提供统一命令驱动的构建流程,降低“本地能跑、他处不能跑”的问题。
与 Ant 相比:
-
Ant 是任务驱动,需要详细定义每一步,且没有约定的目录结构和生命周期;依赖管理需额外集成。
-
Maven 有约定(约定优于配置)、内置生命周期、和集成的依赖/仓库管理,简化配置。
Maven 的关键优势:
-
约定目录结构(知道源码在哪里,输出在哪里)。
-
生命周期(如执行
mvn install自动执行 compile/test/package/install)。 -
统一配置(pom.xml) — 项目行为集中化描述。
-
依赖管理 + 仓库(中央仓库与私服),支持传递依赖与版本管理。
2. Maven 安装与入门
2.1. Maven 安装目录与环境配置
2.1.2. Maven 安装目录分析(常见目录)
-
bin/:包含mvn(或mvn.cmd)启动脚本。 -
boot/:包含类加载器框架(如 plexus-classworlds)。 -
conf/:全局配置(如settings.xml)的位置。 -
lib/:Maven 运行所需的 jar 库。 -
其他:
LICENSE.txt、NOTICE.txt、README.txt等说明文件。
2.1.3. Maven 的环境变量(Windows 示例)
-
设置
MAVEN_HOME:指向 Maven 解压目录(例如D:\TOOLS\maven\apache-maven-3.5.4)。 -
设置
Path:将%MAVEN_HOME%\bin加到系统Path,以便在命令行直接运行mvn。 -
设置
MAVEN_OPTS(可选):JVM 启动参数,例如-Xms128m -Xmx512m(解决构建内存问题)。 -
settings.xml(配置文件):
-
全局:
%MAVEN_HOME%/conf/settings.xml(影响所有使用该 Maven 的用户)。 -
用户级:
~/.m2/settings.xml(仅影响当前用户)。 -
可在
settings.xml中配置本地仓库路径、镜像(mirror)、代理、服务器认证等。
-
验证安装(Windows 示例):在命令行执行 mvn -version,应输出 Maven 版本、Java 版本、默认 locale 等信息(示例输出中有拼写/路径问题请以系统实际输出为准)。
2.2. Maven 的第一个项目(示例流程)
2.2.1. 约定的目录结构(Maven 标准)
project-root/
├─ src/
│ ├─ main/
│ │ ├─ java/ # .java 源码
│ │ └─ resources/ # 资源文件(spring/mybatis 配置等)
│ └─ test/
│ ├─ java/ # 测试源码(JUnit)
│ └─ resources/ # 测试资源
├─ target/ # Maven 构建输出目录(自动生成)
└─ pom.xml # 项目描述与配置
2.2.2. 示例 pom.xml(基础)
<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>cn.tx.maven</groupId><artifactId>Hello</artifactId><version>0.0.1-SNAPSHOT</version><name>Hello</name><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope></dependency></dependencies>
</project>
说明:
SNAPSHOT表示持续开发版本,非正式发布版。
2.2.3. 示例代码:Hello.java
package cn.tx.maven;public class Hello {public String sayHello(String name){return "Hello " + name + "!";}
}
2.2.4. 示例测试:HelloTest.java
package cn.tx.maven;import org.junit.Test;
import static junit.framework.Assert.assertEquals;public class HelloTest {@Testpublic void testHello(){Hello hello = new Hello();String results = hello.sayHello("maven");assertEquals("Hello maven!", results);}
}
2.2.5. 常见 Maven 命令与效果
-
mvn compile:编译源码,生成target/classes。 -
mvn clean:清理(删除target)。 -
mvn test:运行测试(src/test/java)。 -
mvn package:打包(例如生成 jar/war 到target)。 -
mvn install:把包安装到本地仓库(~/.m2/repository),供其他本地项目依赖。 -
mvn clean package:组合命令,先清理再打包。
这些命令展示了 Maven 生命周期与插件协作。
2.3. Maven 的第二个项目(模块依赖示例)
2.3.1. 目录结构(HelloFriend)
HelloFriend/
├─ src/main/java/...
├─ src/test/java/...
└─ pom.xml
2.3.2. HelloFriend 的 pom.xml(依赖另一个模块 Hello)
<project ...><modelVersion>4.0.0</modelVersion><groupId>cn.tx.maven</groupId><artifactId>HelloFriend</artifactId><version>0.0.1-SNAPSHOT</version><name>HelloFriend</name><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope></dependency><!-- 依赖本地模块 Hello --><dependency><groupId>cn.tx.maven</groupId><artifactId>Hello</artifactId><version>0.0.1-SNAPSHOT</version><scope>compile</scope></dependency></dependencies>
</project>
注意:若 Hello 模块未安装到本地仓库,会报错
Could not find artifact cn.tx.maven:Hello:jar:0.0.1-SNAPSHOT。解决方法:先在 Hello 项目根目录执行mvn clean install,把 Hello 安装到本地仓库,再构建 HelloFriend。
2.3.3. HelloFriend.java(调用 Hello)
package cn.tx.maven;public class HelloFriend {public String sayHelloToFriend(String name){Hello hello = new Hello();String str = hello.sayHello(name) + " I am " + this.getMyName();System.out.println(str);return str;}public String getMyName(){return "John";}
}
2.3.4. HelloFriendTest.java
package cn.tx.maven;import static junit.framework.Assert.assertEquals;
import org.junit.Test;public class HelloFriendTest {@Testpublic void testHelloFriend(){HelloFriend helloFriend = new HelloFriend();String results = helloFriend.sayHelloToFriend("zhanggan");assertEquals("Hello zhanggan! I am John", results);}
}
2.3.5. 构建流程要点
-
若 Hello 未安装到本地仓库 →
mvn package会失败(找不到依赖)。 -
先进入 Hello 项目执行
mvn clean install,将 Hello 安装到本地仓库(~/.m2/repository/cn/tx/maven/Hello/0.0.1-SNAPSHOT)。 -
然后在 HelloFriend 项目执行
mvn package→ 构建成功。
2.4. Maven 仓库配置
2.4.1. Maven 仓库概念
-
仓库(Repository):存储构建产物(jar/war/pom 等)的地方。Maven 通过仓库解析依赖。
-
仓库布局:按坐标存放:
groupId/artifactId/version/artifactId-version.packaging(例如cn/tx/maven/Hello/0.0.1-SNAPSHOT/Hello-0.0.1-SNAPSHOT.jar)。 -
仓库分类:
-
本地仓库:位于
~/.m2/repository(可以配置到其他路径)。每个用户通常有一个本地仓库。 -
远程仓库:在线仓库(如 Maven Central
https://repo.maven.apache.org/maven2)。 -
私服(私有远程仓库):公司内部搭建的仓库(例如 Nexus、Artifactory),用于内部组件共享与第三方镜像缓存。
-
2.4.2. 配置本地仓库(settings.xml)
-
全局配置:
%MAVEN_HOME%/conf/settings.xml(影响使用该 Maven 的所有用户)。 -
用户配置:
~/.m2/settings.xml(仅影响当前用户)。 -
在
<localRepository>/path/to/local/repo</localRepository>中指定自定义本地仓库路径。 -
使用本地仓库(课程或公司提供的离线仓库)可以避免因网络问题造成依赖下载失败。
2.5. IDEA 整合 Maven 项目
2.5.1. IDEA 的 Maven 全局配置
-
在 IDEA 设置(Settings / Preferences)中配置 Maven:指定
Maven home directory(使用自带或自定义 Maven)、User settings file(指向~/.m2/settings.xml)、本地仓库位置与 VM options(MAVEN_OPTS)。 -
这些设置会影响在该 IDEA 上打开/创建的 Maven 项目的默认构建行为。
2.5.2. IDEA 创建 Maven Java 项目
-
通过 IDEA 的 New Project → Maven,选择 archetype(或不使用 archetype),IDEA 会自动生成标准目录结构与基础
pom.xml。 -
若网络或本地仓库配置问题导致 archetype 下载慢或卡住,可设置
ArchetypeCatalog=local强制从本地加载。
2.5.3. IDEA 创建 Maven Web 项目(注意点)
-
Web 项目会初始化 web 相关目录结构(例如
src/main/webapp/WEB-INF/web.xml等)。 -
若创建很慢或卡在 “Generating project in Batch mode”,检查本地仓库或 archetype 源是否可用(建议使用企业/课程提供的本地仓库)。
-
配置 Tomcat(Run/Debug Configurations)并设置部署 artifact(war)以便在 IDEA 中调试运行 Web 项目。
2.6. Maven 项目视图(IDEA 中)
-
Maven 项目视图 用来查看项目模块与生命周期(plugins、dependencies、profiles 等)。
-
可以在该视图中直接执行常用 Maven 命令(clean、package、install、test、site 等),并观察构建输出与插件执行详情。
-
适合快速定位依赖、执行特定阶段或运行插件目标。
非常好👍,你这一部分内容已经是 Maven 进阶知识体系的完整框架了。为了帮助你整理成学习笔记或 markmap 思维导图,我可以把这一整节(3. Maven 进阶)系统化地重新排版成一份结构清晰、格式规范、带层次的 Markdown 学习笔记版。
3.Maven 进阶
3.1 POM 文件(pom.xml)
POM(Project Object Model,项目对象模型)是 Maven 项目的核心文件。
它定义了项目的基本信息,用于描述项目如何构建、声明项目依赖等。
就像:
-
Make 的
MakeFile -
Ant 的
build.xml
Maven 使用 pom.xml 来管理整个项目生命周期。
3.2 坐标(Coordinates)
3.2.1 概念
在 Maven 中,坐标(Coordinate) 是每个构件(Artifact)的唯一标识。
一个坐标通常由以下 5 个元素组成:
| 元素 | 说明 | 是否必须 |
|---|---|---|
| groupId | 组织标识(一般为公司网址的反写+项目名) | ✅ |
| artifactId | 项目名称(通常为项目名-模块名) | ✅ |
| version | 版本号(如 1.0.0) | ✅ |
| packaging | 打包方式(默认为 jar) | ⚙️ |
| classifier | 附属构件(用于区分不同输出) | ⚙️ |
3.2.2 坐标的意义
-
为所有构件提供 唯一标识
-
统一规范,方便自动查找与下载依赖
-
支持机器自动解析与依赖管理
3.2.3 坐标详解
版本号命名规范:
| 示例 | 含义 |
|---|---|
1.0.0-SNAPSHOT | 快照版(开发中) |
1.0.0-ALPHA | 内测版 |
1.0.0-BETA | 公测版 |
1.0.0-RELEASE | 稳定版 |
1.0.0-GA | 正式发布版 |
3.2.4 示例:自定义项目坐标
<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>cn.tx.maven</groupId><artifactId>HelloFriends</artifactId><version>0.1.5-SNAPSHOT</version><packaging>jar</packaging>
</project>
3.3 依赖(Dependencies)
3.3.1 依赖的意义
项目开发时需要使用各种外部库(例如 JUnit、MyBatis 等)。
Maven 能自动管理这些依赖:
-
自动下载依赖及其传递依赖
-
管理版本,避免冲突
-
存储到本地仓库,重复使用
3.3.2 依赖的使用示例
<dependencies><!-- 测试依赖 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope></dependency><!-- 自定义项目依赖 --><dependency><groupId>cn.tx.maven</groupId><artifactId>Hello</artifactId><version>0.0.1-SNAPSHOT</version></dependency>
</dependencies>
属性说明:
| 属性 | 含义 |
|---|---|
| 三维坐标 | 唯一定位依赖包 |
| scope | 控制依赖包在哪些阶段加入 classpath |
3.3.3 查找依赖
访问 Maven 官方中央仓库查找坐标:
🔗 https://mvnrepository.com/
示例:搜索 MyBatis
3.4 依赖范围(Scope)
| Scope | 主代码有效 | 测试代码有效 | 运行时有效 | 示例 |
|---|---|---|---|---|
| compile | ✅ | ✅ | ✅ | log4j |
| test | ❌ | ✅ | ❌ | junit |
| provided | ✅ | ✅ | ❌ | servlet-api |
| runtime | ❌ | ❌ | ✅ | JDBC Driver |
| system | ✅ | ✅ | ✅(需本地路径) | 手动引入Jar |
| import | (用于依赖管理) | - | - | - |
3.5 依赖传递与阻断
3.5.1 依赖传递
示例:
Hello → HelloFriend → MakeFriend
MakeFriend 项目间接继承 Hello 的依赖。
3.5.2 依赖范围对传递的影响
| 第一传递依赖 | compile | test | provided | runtime |
|---|---|---|---|---|
| compile | compile | - | - | runtime |
| test | test | - | - | test |
| provided | provided | - | provided | provided |
| runtime | runtime | - | - | runtime |
3.5.3 阻断传递
使用 <optional>true</optional> 阻断依赖:
<dependency><groupId>cn.tx.maven</groupId><artifactId>Hello</artifactId><version>0.0.1-SNAPSHOT</version><optional>true</optional>
</dependency>
3.5.4 可选依赖(排除依赖)
使用 <exclusion> 显式排除某个依赖:
<exclusions><exclusion><groupId>cn.tx.maven</groupId><artifactId>Hello</artifactId></exclusion>
</exclusions>
3.6 仓库(Repository)
3.6.1 仓库概念
Maven 仓库是用来存放所有依赖构件(JAR/WAR/POM)的地方。
分类:
-
本地仓库(local)
-
中央仓库(central)
-
远程仓库(remote)
3.6.2 本地仓库
路径:
Windows: C:\Users\<用户名>\.m2\repository
Linux: /home/<用户>/.m2/repository
可通过 settings.xml 修改位置:
<localRepository>D:\maven_repo</localRepository>
3.6.3 中央仓库
-
由 Maven 官方维护
-
包含几乎所有常用开源库
-
访问地址:https://repo.maven.apache.org/maven2
3.6.4 搜索顺序
Maven 在下载依赖时的顺序:
-
本地仓库
-
私服(远程仓库)
-
中央仓库
3.7 生命周期(Lifecycle)
3.7.1 概念
Maven 生命周期定义了项目构建的 完整流程阶段。
包含三大生命周期:
-
clean(清理)
-
default(构建)
-
site(生成站点)
3.7.2 生命周期阶段表
| 生命周期 | 阶段(Phase) | 说明 |
|---|---|---|
| clean | pre-clean → clean → post-clean | 清理项目 |
| default | validate → compile → test → package → install → deploy | 构建项目 |
| site | pre-site → site → post-site → site-deploy | 生成站点文档 |
示例命令:
mvn clean package
👉 将依次执行 clean → validate → compile → test → package
3.7.3 内置插件绑定表
| 生命周期 | 阶段 | 插件目标 |
|---|---|---|
| clean | clean | maven-clean-plugin:clean |
| default | compile | maven-compiler-plugin:compile |
| default | test | maven-surefire-plugin:test |
| default | package | maven-jar-plugin:jar / maven-war-plugin:war |
| default | install | maven-install-plugin:install |
| default | deploy | maven-deploy-plugin:deploy |
| site | site | maven-site-plugin:site |
3.8 插件(Plugins)
插件用于执行实际任务,如编译、测试、打包、部署等。
常用插件:
-
maven-compiler-plugin -
maven-surefire-plugin -
maven-jar-plugin -
maven-deploy-plugin
3.9 Maven 的继承与聚合
3.9.1 继承的意义
-
避免重复配置
-
统一版本与仓库管理
-
提升项目安全性与一致性
3.9.2 可继承元素
包括:
-
groupId、version、description、organization、url
-
dependencies、dependencyManagement
-
repositories、build、reporting 等
3.9.3 IDEA 中的继承实现
父项目创建后,子模块可继承父级 POM 的:
-
依赖
-
仓库配置
-
插件管理
3.9.4 依赖管理方式
| 方式 | 子模块继承行为 | 示例 |
|---|---|---|
<dependencies> | 自动继承依赖 | 直接引用 mybatis |
<dependencyManagement> | 不继承依赖,但继承版本 | 子模块引用时不写 version |
3.9.5 聚合管理
聚合用于统一构建多个模块。
父项目 pom.xml 示例:
<modules><module>core</module><module>manage</module><module>portal</module>
</modules>
执行命令:
mvn install
👉 会自动构建所有模块。
3.9.6 Properties 属性
使用 properties 统一管理版本号或通用信息:
<properties><spring.version>5.3.9</spring.version>
</properties><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version>
</dependency>
当然可以。以下是你提供内容的系统化总结版,已按“学习笔记+文档风格”重新整理,层次清晰、逻辑完整,格式为 Markdown,可直接导入 Markdown 编辑器或 markmap 思维导图工具中使用。
4、Maven 私服架构详解
4.1 Maven 私服介绍
4.1.1 私服概述
在企业级开发中,不同的项目组会负责不同模块的工程。
例如:
-
maven-dao工程开发完成后,发布到私服; -
maven-service工程则从私服中下载dao模块依赖。
私服的作用
公司在局域网内部搭建的远程 Maven 仓库服务器称为 私服(Private Repository)。
主要功能如下:
-
构建共享中心:
员工将自己开发的项目打成 jar 包并上传到私服,其他项目组可直接引用使用。 -
统一依赖管理:
各工程从私服中下载依赖,避免版本混乱。 -
中央仓库代理:
当私服中没有某个 jar 包时,它会自动从 Maven 中央仓库 下载并缓存,供后续使用。
4.1.2 Nexus 介绍
Nexus 是目前最常用的 Maven 仓库管理工具。
它提供以下功能:
-
支持多种仓库类型(宿主、代理、仓库组等)
-
提供 web 图形化管理界面
-
支持权限控制与账户管理
-
提供构件(artifact)搜索与上传功能
4.2 Maven 私服实战
4.2.1 Nexus 安装与启动
① 解压与配置
将 nexus-2.12.0-01-bundle.zip 解压到无中文路径目录中。
修改配置文件:conf/nexus.properties
# Jetty section
# 端口号
application-port=8081
application-port=8079# 允许访问的主机监听
application-host=0.0.0.0# nexus 工程目录
nexus-webapp=${bundleBasedir}/nexus# 访问路径
nexus-webapp-context-path=/nexus# 工作目录
nexus-work=${bundleBasedir}/../sonatype-work/nexus
runtime=${bundleBasedir}/nexus/WEB-INF
② 安装命令
进入 nexus/bin 目录(管理员身份运行 CMD):
nexus.bat install # 安装 Nexus 服务
nexus.bat start # 启动 Nexus
nexus.bat stop # 停止服务
nexus.bat uninstall # 卸载 Nexus
③ 访问 Nexus
浏览器访问:
http://localhost:8079/nexus
登录默认账号:
-
用户名:admin
-
密码:admin123
4.2.2 Nexus 仓库类型
| 仓库类型 | 名称 | 功能说明 |
|---|---|---|
| hosted(宿主仓库) | 公司自建仓库,用于存放发布的 jar 包。分为:- releases(稳定版本)- snapshots(测试版本) | |
| proxy(代理仓库) | 代理外部公共仓库,如 Maven 中央仓库,当私服中无依赖时自动下载并缓存。 | |
| group(仓库组) | 将多个仓库(hosted/proxy)组合成一个访问入口。通常项目连接此类型。 | |
| virtual(虚拟仓库) | 用于兼容 Maven 1.x 构件或插件。 |
4.2.3 将项目发布到私服
① 在客户端配置私服账户
在本地 settings.xml 文件中配置上传认证信息:
<servers><!-- 稳定版本 --><server><id>releases</id><username>admin</username><password>admin123</password></server><!-- 测试版本 --><server><id>snapshots</id><username>admin</username><password>admin123</password></server>
</servers>
② 配置项目的私服地址
在项目 pom.xml 中添加:
<distributionManagement><repository><id>releases</id><url>http://localhost:8079/nexus/content/repositories/releases/</url></repository><snapshotRepository><id>snapshots</id><url>http://localhost:8079/nexus/content/repositories/snapshots/</url></snapshotRepository>
</distributionManagement>
⚠️ 注意:
id值需与settings.xml中一致。
③ 执行发布命令
在项目目录执行:
mvn deploy
将项目发布到对应的私服仓库(根据版本号判断上传位置)。
4.2.4 从私服下载 jar 包
① 在 settings.xml 中配置镜像
<mirror><id>nexus</id><mirrorOf>*</mirrorOf><name>nexus maven</name><url>http://localhost:8079/nexus/content/groups/public</url>
</mirror>
② 测试步骤
-
将一个项目发布到私服;
-
删除本地仓库中的对应 jar;
-
在另一个项目中引入该依赖,查看是否从私服下载:
<dependency><groupId>cn.tx.maven</groupId><artifactId>txmaven_demo1013</artifactId><version>1.0-RELEASES</version>
</dependency>
③ 可选方式:在 pom.xml 中直接配置仓库
<repositories><repository><id>nexus</id><name>nexus maven</name><url>http://localhost:8079/nexus/content/groups/public</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository>
</repositories>
但这种方式需在每个项目重复配置,不推荐。
④ 推荐统一配置方式
在 settings.xml 中添加 profile:
<profiles><profile><id>dev</id><repositories><repository><id>nexus</id><url>http://localhost:8079/nexus/content/groups/public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories><pluginRepositories><pluginRepository><id>public</id><name>Public Repositories</name><url>http://localhost:8079/nexus/content/groups/public</url></pluginRepository></pluginRepositories></profile>
</profiles><activeProfiles><activeProfile>dev</activeProfile>
</activeProfiles>
这样所有项目都会自动从私服下载依赖与插件。
4.2.5 第三方 Jar 包发布到私服
有些第三方 jar(如 fastjson)无法直接从中央仓库下载,可手动上传。
① 安装到本地仓库
mvn install:install-file -DgroupId=com.alibaba \
-DartifactId=fastjson \
-Dversion=1.1.37 \
-Dfile=fastjson-1.1.37.jar \
-Dpackaging=jar
② 上传到私服
在 settings.xml 中添加账户:
<server><id>thirdparty</id><username>admin</username><password>admin123</password>
</server>
执行命令:
mvn deploy:deploy-file \
-DgroupId=com.alibaba \
-DartifactId=fastjson \
-Dversion=1.1.37 \
-Dpackaging=jar \
-Dfile=fastjson-1.1.37.jar \
-Durl=http://localhost:8079/nexus/content/repositories/thirdparty/ \
-DrepositoryId=thirdparty
上传完成后,即可在私服中搜索并使用该 jar 包。
✅ 总结
| 操作 | 配置文件 | 关键命令 / 标签 | 功能 |
|---|---|---|---|
| 安装 Nexus | nexus.properties | nexus.bat start/stop | 启动私服服务 |
| 上传 jar | settings.xml + pom.xml | mvn deploy | 将项目发布到私服 |
| 下载 jar | settings.xml | <mirror>、<profile> | 从私服获取依赖 |
| 上传第三方 jar | CLI | mvn deploy:deploy-file | 上传外部 jar 包 |
| 仓库类型 | Nexus GUI | hosted / proxy / group | 管理仓库分类与代理 |
