1. 概述
Maven是Apache公司的开源项目,是项目构建工具。用来依赖管理。
1.1 Maven的好处
- 不需要再拷贝jar包。项目中不需要存放jar包。项目源代码占用空间很小
- 使用maven开发的工程,如果环境统一导入别的项目不会报错
- 代码耦合度进一步降低
- 方便项目进行升级
- 节省人力成本
1.2 Maven两大核心:
依赖管理:对jar包统一管理。
项目构建:项目在编码完成后,对项目进行编译、测试、打包、部署等一系列的操作都通过命令实现。
1.3 Maven安装、配置本地仓库
Maven程序安装前提:Maven程序是Java开发的,它运行依赖JDK
1.4 Maven项目标准目录结构
ProjectName
src
main
java
resource
webapp/WEB-INF/web.xml
Test
java
Resource
pom.xml
1.5 Maven的常用命令
tomcat:run
通过Maven命令将Web项目发布到Tomcat中
clean:清理
将项目目录中target目录清理掉
compile:编译
将项目中.java文件编译成为.class文件
test:单元测试
将项目的根目录下src/test/java目录下的单元测试类都会执行。
单元测试类有要求:XxxTest.java
package:打包
web项目----war包
java项目----jar包
将项目打包,打包项目根目录target目录
install:安装
解决本地多个项目共用一个jar包。
打包到本地仓库
deploy:
将jar包上传到私服
1.6 Maven的生命周期
在Maven中存在“三套”生命周期,每一套生命周期相互独立,互不影响。在一套生命周期内,执行后面的命令,前面的操作会自动执行。
CleanLifeCycle:清理声明周期。
clean
defaultLifeCycle:默认生命周期
compile,test,package,deploy
siteLifeCycle:站点生命周期
site
1.7 POM文件
Group Id : 公司名称
Artifact Id:项目名称
Version:版本
SNAPSHOT 测试版本
RELEASES 正式版本
packaging: 打包方式
jar--- java 项目
war ---web项目
pom ----父工程
依赖范围
依赖范围 | 对于编译classpath有效 | 对于测试classpath有效 | 对于运行时classpath有效 | 例子 |
---|---|---|---|---|
compile | Y | Y | Y | spring-core |
test | - | Y | - | junit |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | jdbc驱动 |
system | Y | Y | - | 本地的Maven仓库之外的类库 |
添加依赖范围:默认是compile
provided 运行部署到tomcat不在需要
传递依赖
A依赖于B,B依赖于C(1.1版本),B是A的直接依赖,C就是A的传递依赖。
导入依赖D,D依赖C(1.2版本)
Maven自己调节原则
- 第一声明者有限原则
谁先定义的就用谁的传递依赖
- 路径近者优先原则
直接依赖级别高于传递依赖
在pom文件中添加插件
jdk编译插件
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
排除依赖
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.20</version>
<exclusions>
<!-- 将struts2-core.jar包中commons-io的传递依赖排除掉 -->
<exclusion>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</exclusion>
</exclusions>
</dependency>
指定依赖版本
<!-- 版本锁定:指定项目中的依赖版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
属性
<!-- 属性 -->
<properties>
<spring.version>4.1.4.RELEASE</spring.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</dependencyManagement>