Java学习笔记(十四):Maven基础


声明:本篇笔记部分摘自《Java核心技术(卷Ⅰ) - 机械工业出版社》Java教程-廖雪峰-2025-06-16,遵循CC BY 4.0协议
存在由AI生成的小部分内容,仅供参考,请仔细甄别可能存在的错误。


一、初识Maven

在实际开发时,我们往往会借助各种包管理工具,例如Python的pip、node.js的npm。对于Java项目,也有这样一个很常用的工具——Maven

Maven是一个Java项目管理和构建工具,它可以定义项目结构、项目依赖,并使用统一的方式进行自动化构建,是Java项目不可缺少的工具。

如果没有Maven,我们需要手动将使用到的依赖相关的jar包都放到classpath中;还需要手动管理整个项目结构,例如src文件夹中放源码,res文件夹放资源和配置,bin文件夹放.class等;不仅如此,还要配置JDK版本、编译打包、配置版本号等信息……

为了提高生产效率,我们需要一个标准化的Java项目管理和构建工具,Maven就是其中的一个;它的主要功能有:

  • 提供了一套标准化的项目结构;
  • 提供了一套标准化的构建流程(编译,测试,打包,发布……);
  • 提供了一套依赖管理机制。

二、Maven项目结构

一个使用Maven管理的普通的Java项目,它的目录结构默认如下:

1
2
3
4
5
6
7
8
9
10
maven-project
├── pom.xml
├── src
│   ├── main
│   │   ├── java
│   │   └── resources
│   └── test
│   ├── java
│   └── resources
└── target

根目录maven-project是Maven项目名,描述信息在pom.xml中。src/main/java是存放源码的位置;相关资源存放在同级的resources中。测试源码及资源存放在src/test中。所有编译打包生成的文件都在target目录里。

src/main 目录的使用区别如下:

  • 用途main 是项目运行的核心,test 是验证核心功能正确性的辅助。
  • 生命周期main 代码参与项目的编译、打包、运行全过程;test 代码仅在执行 mvn test 等测试命令时被编译和执行,不进入最终产物。
  • 依赖test 目录的代码可以依赖 main 目录的代码,但反之不可(避免测试逻辑侵入业务代码)。

例如,对 UserService 的 getUserById 方法编写单元测试,测试类 UserServiceTest.java 放在 src/test/java/com/company/service 下,测试时可能读取 src/test/resources/test-users.json 中的模拟数据。

三、pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>com.itranswarp.learnjava</groupId>
<artifactId>hello</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.release>17</maven.compiler.release>
</properties>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.0.16</version>
</dependency>
</dependencies>
</project>

pom.xml的内容大致是这样的,其中groupId类似于Java的包名,通常是公司或组织名称,artifactId类似于Java的类名,通常是项目名称,再加上version,一个Maven工程就由groupIdartifactIdversion作为唯一标识。需要使用其他的依赖时,在<dependency>中声明,Maven就会自动下载这个依赖包并把它放到classpath中。

<properties>中常用的属性有:

  • project.build.sourceEncoding:表示项目源码的字符编码,通常应设定为UTF-8
  • maven.compiler.release:表示使用的JDK版本,例如21
  • maven.compiler.source:表示Java编译器读取的源码版本;
  • maven.compiler.target:表示Java编译器编译的Class版本。

四、安装Maven

Maven官网下载最新的Maven 3.9.x,然后解压出来,并且设置这样的环境变量:

1
2
M2_HOME=/path/to/maven-3.9.x
PATH=$PATH:$M2_HOME/bin

打开cmd进行验证,输入 mvn -version,应该可以看到输出的maven版本信息。

五、结语

推荐使用IntelliJ IDEA来进行现代项目的开发。IDEA中集成了Maven,并且提供了很多可视化的操作,提高了项目构建的效率和便捷度。


参考资料

  1. 廖雪峰的官方网站.Java教程[EB/OL].(2025-06-07)[2025-08-21]. https://liaoxuefeng.com/books/java/introduction/index.html

Java学习笔记(十四):Maven基础
http://blog.morely.top/2025/09/24/Java学习笔记(十四):Maven基础/
作者
陌离
发布于
2025年9月24日
许可协议