maven-依赖管理-下

依赖冲突

特殊优先

  1. 特殊优先∶当同级配置了相同资源的不同版本,后配置的覆盖先配置的(提醒:要尽量避免这种没有意义的冲突)
  2. 修改D:\java_projects\maven_A\pom.xml, 引入mysql5.1

<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">
    <modelVersion>4.0.0modelVersion>
    <groupId>com.wyxgroupId>
    <artifactId>maven_AartifactId>
    <version>1.0-SNAPSHOTversion>
    <dependencies>
        
        <dependency>
            <groupId>com.wyxgroupId>
            <artifactId>maven_DartifactId>
        
            <version>1.0-SNAPSHOTversion>
        dependency>
        
        <dependency>
            <groupId>com.wyxgroupId>
            <artifactId>maven_BartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>5.1.47version>
        dependency>
        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>5.1.43version>
        dependency>
    dependencies>

project>
  1. 根据特殊优先原则: maven_A 生效的是mysql5.1.43

maven-依赖管理-下_第1张图片

  1. 测试完后,注销到引入mysql5.1.43 , 这里是为了验证.

可选依赖

一句话: 可选依赖指对外隐藏当前所依赖的资源- 不透明

举例说明

  1. 需求: 隐藏maven_D 项目的junit 依赖,不让其他项目来使用
  2. 修改D:\java_projects\maven_D\pom.xml

<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">
    <modelVersion>4.0.0modelVersion>
    <groupId>com.wyxgroupId>
    <artifactId>maven_DartifactId>
    <version>1.0-SNAPSHOTversion>
    <dependencies>
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>4.13.2version>
            
            <optional>trueoptional>
        dependency>
    dependencies>
project>
  1. 刷新maven 管理器,看maven_A 的变化

maven-依赖管理-下_第2张图片

  1. 测试完毕后,别忘了恢复原来状态.

排除依赖

一句话: 排除依赖指主动断开依赖的资源, 被排除的资源无需指定版本- 不需要

举例说明

  1. 需求: maven_A 项目主动排除maven_D 的junit4.13.2 这个依赖
  2. 修改D:\java_projects\maven_D\pom.xml

<dependency>
    <groupId>com.wyxgroupId>
    <artifactId>maven_DartifactId>
    <version>1.0-SNAPSHOTversion>
    
    <exclusions>
        <exclusion>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
        exclusion>
    exclusions>
dependency>
  1. 刷新maven 管理器,看maven_A 的变化, 仍然是拿不到junti4.13.2, 提示: 再通过HelloTest.java 来验证实际使用的junit 版本, 更加清晰了.

maven-依赖管理-下_第3张图片

可选依赖和排除依赖区别

一句话: 隐藏依赖是不让其他项目来引用(我不给), 排除依赖是主动不要引入的某个资源(我不要)

依赖范围

作用范围

一句话: 依赖的jar 默认情况可以在任何地方使用, 通过scope 标签设定其作用范围

举例说明

● 作用范围说明

  1. 主程序范围有效(src/main 文件夹范围内)
  2. 测试程序范围有效(src/test 文件夹范围内)
  3. 是否参与打包(package 指令范围内)
  4. compile(默认,在主程序、测试代码、打包都有效)

● 作用范围一览图

maven-依赖管理-下_第4张图片

解读

  1. 某个引入的jar 包作用范围是程序员根据,业务的实际需要来设置的,不要认为是固定的。
  2. 比如log4j jar 包,在主程序,测试代码,打包都是需要的, 因此作用范围应当设置为complie
  3. junit 只是测试代码需要,因此作用范围设置为test 合适,但是如果程序员认为在主程序和打包就是要junit, 仍然可以设置为默认compile
  4. 比如servlet-api 是tomcat 自己带的,当把程序打包放到生产环境时,用生产环境tomcat 的servlet-api 即可,所以设置为provided 合适,这样就放在servlet-api 版本冲突.
  5. 比如jdbc, 是第三方的jar , 打包放在生产环境,就应当在自己的包提供jdbc 驱动包,否则程序会因为少驱动包,运行失败

● 看一个案例, 体会依赖范围的特点.


<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">
    <modelVersion>4.0.0modelVersion>
    <groupId>com.wyxgroupId>
    <artifactId>maven_DartifactId>
    <version>1.0-SNAPSHOTversion>
    <dependencies>
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>4.13.2version>
            
            <optional>falseoptional>
            
            <scope>testscope>
        dependency>
    dependencies>
project>
  1. 创建D:\java_projects\maven_D\src\test\java\T2.java, 在test 范围正常使用
import org.junit.Test;

public class T2 {
    @Test
    public void f1(){
    }
}
  1. 创建D:\java_projects\maven_D\src\main\java\T1.java, 在主程序中,报错

maven-依赖管理-下_第5张图片

  1. 修改D:\java_projects\maven_D\pom.xml, 发现主程序和测试程序都可以使用了.
<optional>falseoptional>

<scope>compilescope>

maven-依赖管理-下_第6张图片

maven-依赖管理-下_第7张图片

  1. 运行maven web 项目

maven-依赖管理-下_第8张图片

你可能感兴趣的:(常用工具,javascript,前端,java,mysql,maven,javaee,ecmascript)