Maven是一个Java项目管理和构建工具,它可以定义项目结构、项目依赖,并使用统一的方式进行自动化构建,是Java项目不可缺少的工具。
一个使用Maven管理的普通的Java项目,它的目录结构默认如下:
a-maven-project
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ └── resources
│ └── test
│ ├── java
│ └── resources
└── target
项目的根目录a-maven-project
是项目名,它有一个项目描述文件pom.xml
,存放Java源码的目录是src/main/java
,存放资源文件的目录是src/main/resources
,存放测试源码的目录是src/test/java
,存放测试资源的目录是src/test/resources
,最后,所有编译、打包生成的文件都放在target
目录里。这些就是一个Maven项目的标准目录结构。
在maven官网中下载,需要配置环境变量,在命令行窗口中输入mvn -version查看maven的版本信息。
path = maven路径/bin
依赖管理
maven可以解决版本依赖问题,自己的项目需要一个包时,会自动导入改包的依赖包。
Maven定义了几种依赖关系,分别是compile
、test
、runtime
和provided
:
scope | 说明 | 示例 |
---|---|---|
compile | 编译时需要用到该jar包(默认) | commons-logging |
test | 编译Test时需要用到该jar包 | junit |
runtime | 编译时不需要,但运行时需要用到 | mysql |
provided | 编译时需要用到,但运行时由JDK或某个服务器提供 | servlet-api |
test
依赖表示仅在测试时使用,正常运行时并不需要。最常用的test
依赖就是JUnit:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.2</version>
<scope>test</scope>
</dependency>
maven构建流程
Maven不但有标准化的项目结构,而且还有一套标准化的构建流程,可以自动化实现编译,打包,发布,等等。
[1] 清理clean:将以前编译得到的旧文件class字节码文件删除
[2] 编译compile:将java源程序编译成class字节码文件
[3] 测试test:自动测试,自动调用junit程序
[4] 报告report:测试程序执行的结果
[5] 打包package:动态Web工程打War包,java工程打jar包
[6] 安装install:Maven特定的概念-----将打包得到的文件复制到“仓库”中的指定位置
[7] 部署deploy:将动态Web工程生成的war包复制到Servlet容器下,使其可以运行
常用的maven命令,在pom.xml的目录中执行命令
[1] mvn clean:清理
[2] mvn compile:编译主程序
[3] mvn test-compile:编译测试程序
[4] mvn test:执行测试
[5] mvn package:打包
[6] mvn install:安装
模块管理
在软件开发中,把一个大项目分拆为多个模块是降低软件复杂度的有效方法:
Maven可以有效地管理多个模块,我们只需要把每个模块当作一个独立的Maven项目,它们有各自独立的pom.xml
。
Maven支持模块化管理,可以把一个大项目拆成几个模块:
- 可以通过继承在parent的
pom.xml
统一定义重复配置; - 可以通过
<modules>
编译多个模块。
跟着刚哥深入学maven(通俗易懂) - 啤酒大泡泡 - 博客园 (cnblogs.com)
在idea上点击file->setting,我们可以选择自己本地的maven或者idea自带的maven,配置settings.xml,然后选择本地仓库存放架包的位置(默认)。
如果配置好了,但是项目中maven加载依赖特别慢或者卡住不动,可以换更新的maven的版本(推荐用idea自带的版本)重新加载。