Maven 是一款为 Java 项目构建管理、依赖管理的工具(软件),使用 Maven 可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。
Maven的作用
-
依赖管理:
Maven 可以管理项目的依赖,包括自动下载所需依赖库、自动下载依赖需要的依赖并且保证版本没有冲突、依赖版本管理等。通过 Maven,我们可以方便地维护项目所依赖的外部库,而我们仅仅需要编写配置即可。
-
构建管理:
项目构建是指将源代码、配置文件、资源文件等转化为能够运行或部署的应用程序或库的过程
Maven 可以管理项目的编译、测试、打包、部署等构建过程。通过实现标准的构建生命周期,Maven 可以确保每一个构建过程都遵循同样的规则和最佳实践。同时,Maven 的插件机制也使得开发者可以对构建过程进行扩展和定制。主动触发构建,只需要简单的命令操作。
Maven的GAVP属性
Maven 中的 GAVP 是指 GroupId、ArtifactId、Version、Packaging 等四个属性的缩写,其中前三个是必要的,而 Packaging 属性为可选项。这四个属性主要为每个项目在maven仓库总做一个标识,有了具体标识,方便maven软件对项目进行管理和互相引用
GAV遵循一下规则:
GroupID 格式:com.{公司/BU }.业务线.[子业务线],最多 4 级。
例:com.taobao.tddl 或 com.alibaba.sourcing.multilang com.atguigu.java
ArtifactID 格式:产品线名-模块名
例:tc-client / uic-api / tair-tool / bookstore
Version版本号格式:主版本号.次版本号.修订号
主版本号:当做了不兼容的 API 修改,或者增加了能改变产品方向的新功能。
次版本号:当做了向下兼容的功能性新增(新增类、接口等)。
修订号:修复 bug,没有修改方法签名的功能加强,保持 API 兼容性。
例: 初始→1.0.0 修改bug → 1.0.1 功能调整 → 1.1.1等
Packaging定义规则:
指示将项目打包为什么类型的文件,idea根据packaging值,识别maven项目类型。
packaging 属性为 jar(默认值),代表普通的Java工程,打包以后是.jar结尾的文件。
packaging 属性为 war,代表Java的web工程,打包以后.war结尾的文件。
packaging 属性为 pom,代表不会打包,用来做继承的父工程。
创建web工程
手动创建
① 创建一个Javase maven工程
②补全文件结构
- main
- webapp
- WEB-INF
- web.xml
③在pom.xml中配置packaging为war
④最后刷新,当webapp的图标多了一个蓝色的点即可
插件创建
①安装JBL插件
②创建一个Javase maven工程
③选择模块后右键,选择JBLJavaToWeb
Maven工程项目结构
|-- pom.xml # Maven 项目管理文件
|-- src
|-- main # 项目主要代码
| |-- java # Java 源代码目录
| | `-- com/example/myapp # 开发者代码主目录
| | |-- controller # 存放 Controller 层代码的目录
| | |-- service # 存放 Service 层代码的目录
| | |-- dao # 存放 DAO 层代码的目录
| | `-- model # 存放数据模型的目录
| |-- resources # 资源目录,存放配置文件、静态资源等
| | |-- log4j.properties # 日志配置文件
| | |-- spring-mybatis.xml # Spring Mybatis 配置文件
| | `-- static # 存放静态资源的目录
| | |-- css # 存放 CSS 文件的目录
| | |-- js # 存放 JavaScript 文件的目录
| | `-- images # 存放图片资源的目录
| `-- webapp # 存放 WEB 相关配置和资源
| |-- WEB-INF # 存放 WEB 应用配置文件
| | |-- web.xml # Web 应用的部署描述文件
| | `-- classes # 存放编译后的 class 文件
| `-- index.html # Web 应用入口页面
`-- test # 项目测试代码
|-- java # 单元测试目录
`-- resources # 测试资源目录
- pom.xml:Maven 项目管理文件,用于描述项目的依赖和构建配置等信息。
- src/main/java:存放项目的 Java 源代码。
- src/main/resources:存放项目的资源文件,如配置文件、静态资源等。
- src/main/webapp/WEB-INF:存放 Web 应用的配置文件。
- src/main/webapp/index.html:Web 应用的入口页面。
- src/test/java:存放项目的测试代码。
- src/test/resources:存放测试相关的资源文件,如测试配置文件等。
Maven依赖管理
Maven依赖管理在pom.xml文件中操作:
dependencies标签 -项目依赖集合,里面有着各个dependency标签
dependency标签 -每个依赖项
每个dependency中的gav标签 -依赖的信息就是其他Maven的工程,这些gav其实是依赖的gav属性
例:
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.15.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
</dependencies>
获取依赖的gav信息的方式
官网查询
https://mvnrepository.com/
找到具体的依赖,选择Maven后将gav属性复制即可
maven插件
使用maven-search插件,使用tools选项里面的maven-search输入依赖名后复制gav信息即可
dependency标签的scope属性
scope属性可以指定依赖的生效范围,在dependency中写入scope标签,在标签中指定范围即可
范围:
compile:在main目录和test目录中使用,表明此依赖参与项目的编译、测试、运行阶段,在打包后包含此依赖
provided:在main目录和test目录使用,表明此依赖仅参与项目的编译、测试阶段
runtime:不会在main和test目录中使用,表明此依赖仅参与项目的运行阶段
test:在test目录中使用,表明此依赖仅参与项目的测试阶段
例:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<!--指定依赖生效的范围-->
<scope>runtime</scope>
</dependency>
引用声明版本
可以对依赖的版本进行统一管理,在properties中声明版本,然后在dependency的version标签中使用${版本名}即可
<!--声明版本-->
<properties>
<!--命名随便,内部制定版本号即可!-->
<junit.version>4.11</junit.version>
<!-- 也可以通过 maven规定的固定的key,配置maven的参数!如下配置编码格式!-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!--引用properties声明版本 -->
<version>${junit.version}</version>
</dependency>
</dependencies>