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 | |
根目录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 | |
pom.xml的内容大致是这样的,其中groupId类似于Java的包名,通常是公司或组织名称,artifactId类似于Java的类名,通常是项目名称,再加上version,一个Maven工程就由groupId,artifactId和version作为唯一标识。需要使用其他的依赖时,在<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 | |
打开cmd进行验证,输入 mvn -version,应该可以看到输出的maven版本信息。
五、结语
推荐使用IntelliJ IDEA来进行现代项目的开发。IDEA中集成了Maven,并且提供了很多可视化的操作,提高了项目构建的效率和便捷度。
参考资料
- 廖雪峰的官方网站.Java教程[EB/OL].(2025-06-07)[2025-08-21]. https://liaoxuefeng.com/books/java/introduction/index.html ↩