依赖配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- 指定pom的模型版本-->
<modelVersion>4.0.0</modelVersion>
<!-- 打包方式:web工程打包为war,java工程打包为jar-->
<packaging>war</packaging>
<!-- 组织id-->
<groupId>cn.ken</groupId>
<!-- 项目id-->
<artifactId>myweb</artifactId>
<!-- 版本号:release(完成版),snapshot(开发版)-->
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<!-- 设置当前工程的所有依赖-->
<dependencies>
<!-- 具体依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 构建-->
<build>
<finalName>myweb</finalName>
<!-- 设置插件-->
<plugins>
<!-- 具体插件-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build>
</project>
依赖传递
Maven依赖传递冲突问题
- 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
- 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
- 特殊优先:当同级配置了相同资源的不同版本时,后配置的覆盖线配置的
可选依赖:在你引用的依赖下加入:<optional>true</optional>
即可隐藏依赖(即他人引用你作为依赖时看不到你引用的依赖)
排除依赖:主动断开依赖的资源,被排除的资源无需指定版本,在引用的依赖下加入
<dependency>
<groupId>xxx</groupId>
<artifactId>xxx</artifactId>
<version>xxx</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
依赖范围
依赖的jar包默认情况下可以在任何地方使用,可以通过scope标签设定其作用范围
作用范围:
- 主程序范围有效(main文件夹范围内)
- 测试程序范围有效(test文件夹范围内)
- 是否参与打包(package指令范围内)
scope | 主代码 | 测试代码 | 打包 | 范例 |
---|---|---|---|---|
compile(默认) | Y | Y | Y | log4j |
test | Y | junit | ||
provided | Y | Y | servlet-api | |
runtime | Y | jdbc |
传递时只有compile和runtime可以传递下去(因为包括了打包)
生命周期与插件
生命周期
- clean:清理工作
- default:核心工作,例如编译、测试、打包、部署等
- site:产生报告,发布站点等
插件
- 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能
- 默认maven在各个生命周期上绑定有预设的功能
- 通过插件可以自定义其他功能
插件是运行到某个生命周期(与某个生命周期绑定)时所执行的功能
Q.E.D.