Skip to content

Apache Maven

https://maven.apache.org/

项目对象模型(POM,Project Object Model) 的 构建自动化工具,主要用于 Java 项目 的依赖管理、构建、测试和部署。它简化了项目的构建流程,提供了一套标准化的项目结构和构建生命周期。

类似工具 Ant、Gradle。

标准项目结构

project                   ← 项目根目录
├── pom.xml               ← 项目核心配置文件(必须)
├── src                   ← 源代码目录
│   ├── main              ← 主代码(编译后包含在最终产物中)
│   │   ├── java          ← Java 源代码(包路径从该目录开始)
│   │   ├── resources     ← 资源文件(如配置文件、静态资源)
│   │   └── webapp        ← Web 项目特有(存放 WEB-INF/、JSP 等)
│   └── test              ← 测试代码(不参与打包)
│       ├── java          ← 测试用的 Java 代码
│       └── resources     ← 测试用的资源文件
└── target                ← 输出目录(由 Maven 自动生成,存放编译结果)
    ├── classes           ← 编译后的 .class 文件
    ├── test-classes      ← 测试代码的编译结果
    └── project.jar       ← 打包生成的 JAR/WAR 文件

构建生命周期 (Build Lifecycle)

命令作用
mvn clean清理 target 目录
mvn compile编译源代码
mvn test运行单元测试
mvn package打包(JAR/WAR)
mvn install安装到本地仓库
mvn deploy部署到远程仓库(如 Nexus)

settings.xml

xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository>${user.home}/.m2/repository</localRepository>
  <pluginGroups></pluginGroups>
  <proxies></proxies>
  <servers></servers>
  <mirrors>
    <!-- public 镜像代理 -->
    <mirror>
      <id>aliyunmaven</id>
      <mirrorOf>*</mirrorOf>
      <name>阿里云公共仓库</name>
      <url>https://maven.aliyun.com/repository/public</url>
	</mirror>
  </mirrors>
  <!-- 如果想使用其它代理仓库,可在<repositories></repositories>节点中加入对应的仓库使用地址。以使用 central 代理仓为例 -->
  <profiles>
    <profile>
	  <repositories>
	    <repository>
          <id>central</id>
          <url>https://maven.aliyun.com/repository/central</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>
	  </repositories>
	</profile>
  </profiles>
  <activeProfiles>
    <activeProfile>central</activeProfile>
  </activeProfiles>
</settings>

阿里云中央仓库

https://maven.aliyun.com/mvn/guide

POM(Project Object Model)

Maven 的核心配置文件,定义了项目的基本信息、依赖、插件、构建配置等。

xml
<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>my-project</artifactId>
    <version>1.0.0</version>
    <!-- 赖管理(Dependency Management) 
      Maven 自动从中央仓库(或配置的私有仓库)下载依赖(JAR 文件)。
      <dependencies> 声明依赖,支持传递性依赖(自动解析依赖的依赖)。
    -->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <!-- 依赖范围 <scope>
              compile:默认,编译和运行都需要
              test:仅测试阶段使用,如 JUnit
              provided:由 JDK 或容器提供,如 Servlet API
            -->
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

安装

sh

# 获取压缩包
wget https://mirrors.ustc.edu.cn/apache/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
curl -Os https://mirrors.ustc.edu.cn/apache/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz

# 配置
export JAVA_HOME="/path/to/java/dirctory"
export M2_HOME="/path/to/maven/dirctory"
export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin

# test
$ java -version
$ mvn -v

mvn package [option]

mvn clean package 清理并打包

可选项缩写说明
-DskipTests-跳过测试(编译测试代码但不执行)
-Dmaven.test.skip=true-完全跳过测试(不编译也不执行测试)
-P<profile-id>-激活指定的 Profile(如 -Pprod 激活 prod 环境配置)
-pl <module>-仅构建指定模块(适用于多模块项目,如 -pl module1
-am-同时构建依赖的模块(与 -pl 一起使用)
-T <threads>-并行构建(如 -T 4 使用 4 个线程加速构建)
-f <pom-file>-指定自定义 pom.xml(如 -f submodule/pom.xml
-e-显示详细错误信息(调试时有用)
-X-启用调试模式(输出更详细的日志)
--offline-离线模式(仅使用本地仓库,不联网下载依赖)

FAQ

3.8.1 版本之后,默认拒绝非 https 远端仓库。

xml
<!-- 1.许可 http 协议 -->
<mirror>
  <id>maven-default-http-blocker</id>
  <mirrorOf>external:dummy:*</mirrorOf>
  <name>Pseudo repository to mirror external repositories initially using HTTP.</name>
  <url>http://0.0.0.0/</url>
  <blocked>true</blocked>
</mirror>