Maven依赖
依赖配置
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<!--...-->
</dependencies>
- 依赖传递
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
- 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
对于
Maven
项目,可能会出现不同版本的依赖,这种情况叫做依赖传递冲突问题
依赖传递冲突问题
- 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
- 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
- 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
可选依赖
对外隐藏当前所依赖的资源
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<optional>true</optional>
</dependency>
排除依赖
主动断开依赖的资源,被排除的资源无需指定版本
<dependency>
<groupId>com.itheima</groupId>
<artifactId>project03</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
依赖范围
依赖的jar
默认情况可以在任何地方使用,可以通过scope
标签设定作用范围
作用范围
- 主程序范围有限
main
文件夹范围内 - 测试程序范围有效
test
文件夹范围内 - 是否参与打包
package
指令范围内
依赖范围传递性
带有传递范围的资源在进行传递时,作用范围将受到影响
生命周期与插件
项目构建生命周期
Maven
构建生命周期描述的是一次构建过程经历的时间
compile
->test-compile
->package
->install
Maven
对项目构建的生命周期划分为3套
-
clean
:清理工作pre-clean
:执行一些需要在clean
之前完成的工作clean
:移除所有上一次构建完成的文件post-clean
:执行一些需要在clean
之后立刻完成的工作
-
default
:核心工作,例如编译、测试、打包、部署等- 如果执行
compile
,那么包括compile
之前的命令都会执行
- 如果执行
-
site
:产生报告,发布站点等pre-site
:执行一些需要生成站点文档之前完成的工作site
:生成项目的站点文档post-site
:执行一些需要在生成站点文档之后完成的工作,并且为部署做准备site-deploy
:将生成的站点文档部署都特定的服务器上
生命周期控制的是在执行任务的过程,每个过程对应一个插件
插件
- 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能
- 默认
maven
在各个生命周期上绑定有预设的功能 - 通过插件可以自定义其他功能
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<goals>
<goal>jar</goal>
<goal>test-jar</goal>
</goals>
<phase>generate-test-resources</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>