一、核心概念
-
POM(项目对象模型) :
pom.xml文件定义项目结构、依赖、构建配置等。 -
坐标:唯一标识项目,包括
groupId(组织名)、artifactId(项目名)、version(版本)。 -
仓库:存储构件(jar、包等),分本地仓库(本地目录)、中央仓库(Maven 公共库)、远程仓库(自定义仓库)。
二、生命周期
-
清理生命周期:
mvn clean(删除编译产物)。 -
编译生命周期:
mvn compile(编译主代码)、mvn test-compile(编译测试代码)。 -
打包生命周期:
mvn package(打包项目,如生成 jar/war)。 -
安装生命周期:
mvn install(将包安装到本地仓库)。
三、常用命令
-
mvn compile:编译主代码。 -
mvn test:运行测试用例。 -
mvn package:打包项目。 -
mvn install:安装到本地仓库。 -
mvn dependency:tree:查看依赖树。
四、pom.xml 关键配置
<project>
<!-- 坐标 -->
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>1.0.0</version>
<!-- 依赖 -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope> <!-- 作用域:compile(默认)、test、provided 等 -->
</dependency>
</dependencies>
<!-- 仓库配置 -->
<repositories>
<repository>
<id>my-repo</id>
<url>http://repo.example.com</url>
</repository>
</repositories>
<!-- 打包类型 -->
<packaging>jar</packaging>
<!-- 默认是 jar,还有 war、pom 等类型 -->
</project>
五、依赖管理
-
依赖 作用域 (scope) :
compile:编译、测试、运行都需要(默认)。test:仅测试阶段需要(如 JUnit)。provided:运行环境已提供(如 Web 容器的 Servlet 依赖)。
-
依赖传递:A 依赖 B,B 依赖 C,则 A 间接依赖 C(可通过
exclusions排除传递依赖)。 -
打包类型( pom ,jar,war)
-
jar
-
-
- 用途:常用于打包 Java 类库或独立 Java 程序。
- 特点:方便代码复用和分发,其他项目能把它作为依赖引入。
-
war
-
用途:专门用于打包 Web 应用程序。
-
特点:包含完整 Web 资源,可直接部署到支持 Servlet 规范的 Web 服务器运行。
-
-
pom
-
-
-
用途:用于父项目或聚合项目。
-
特点:本身不打包成具体构件,主要管理和配置其他模块,实现配置共享与复用。
-
-
六、插件与高级特性
- 插件:Maven 功能扩展,如
maven-compiler-plugin管理编译版本。 - 继承:通过
<parent>标签复用父项目配置,减少重复。 - 聚合:多模块项目中,通过
<modules>定义子模块,统一构建。