依赖配置

<?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在各个生命周期上绑定有预设的功能
  • 通过插件可以自定义其他功能

插件是运行到某个生命周期(与某个生命周期绑定)时所执行的功能