八、依赖管理详解
坐标组成
Maven坐标通过以下元素唯一标识构件:
XML
<groupId>com.example</groupId> <!-- 组织标识 -->
<artifactId>my-app</artifactId> <!-- 项目标识 -->
<version>1.0-SNAPSHOT</version> <!-- 版本号 -->
<packaging>jar</packaging> <!-- 打包类型(默认jar) -->
依赖范围(Scope)
compile:默认范围,参与编译、测试、运行。test:仅测试阶段有效(如JUnit)。provided:编译和测试有效,运行时由容器提供(如Servlet API)。runtime:测试和运行有效,编译时不需要(如JDBC驱动)。
依赖传递与排除
- 传递依赖:A依赖B,B依赖C,则A默认传递依赖C。
- 排除依赖:使用
<exclusions>阻断特定传递依赖。 - 可选依赖:
<optional>true</optional>标记后,依赖不会传递。
九、生命周期与插件
三套生命周期
- clean :清理项目(
mvn clean)。 - default :核心构建流程(
compile→test→package→install)。 - site:生成项目文档和报告。
常用插件绑定
maven-compiler-plugin:指定JDK版本编译。maven-surefire-plugin:执行单元测试。maven-jar-plugin:生成JAR包。maven-install-plugin:安装构件到本地仓库。
十、继承与聚合
继承(Inheritance)
-
父模块定义公共配置(如依赖版本、插件):
XML<dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> </dependencyManagement> -
子模块通过
<parent>引用父模块,可省略版本号。
聚合(Aggregation)
-
父模块通过
<modules>聚合子模块:XML<modules> <module>child-module1</module> <module>child-module2</module> </modules> -
执行父模块命令会按顺序构建所有子模块。
依赖管理区别
dependencies:子模块自动继承所有依赖。dependencyManagement:仅管理版本,子模块需显式声明依赖。
十一、Maven私服(Nexus)
私服作用
- 缓存中央仓库构件,加速内部构建。
- 托管内部私有构件(如公司内部库)。
- 控制依赖访问权限,提升安全性。
发布到私服
-
在
settings.xml配置认证:XML<server> <id>nexus-releases</id> <username>admin</username> <password>password</password> </server> -
在
pom.xml配置仓库地址:XML<distributionManagement> <repository> <id>nexus-releases</id> <url>http://nexus.example.com/repository/maven-releases/</url> </repository> </distributionManagement> -
执行
mvn deploy发布构件。
从私服下载
-
在
settings.xml配置镜像或Profile:XML<mirror> <id>nexus</id> <url>http://nexus.example.com/repository/maven-public/</url> <mirrorOf>*</mirrorOf> </mirror> -
区分
releases(稳定版)和snapshots(快照版)仓库策略。