• Apache Maven系列【2】依赖的scope范围总结和将jar包安装到maven仓库


    1. scope的可选值

    可选值如下:

    compile、test、provided、import、system、runtime

    2. 依赖范围表(compile、test、provided)

    空间时间\scopecompile(默认)testprovided
    main目录(空间)有效无效有效
    test目录(空间)有效有效有效
    开发过程(时间)有效有效有效
    部署到服务器(时间)有效无效无效
    应用场景服务器需要该jar包测试服务器已有该jar包

    3. import

    当我们自己创建的项目父工程,依赖另一个项目的父工程,会违背Maven的单继承。可以通过import依赖范围来依赖多个项目的父工程

    如下示例所示:

      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>2021.0.3</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
    
        </dependencies>
      </dependencyManagement>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    说明:

    • 必须放在dependencyManagement中
    • type: 打包类型必须是 pom

    4. system

    用于将本地的jar包引入到我们项目进行使用。移植性太差,不建议使用

      <dependencies>
        <dependency>
          <groupId>org.apache.flink</groupId>
          <artifactId>flink-connector-jdbc</artifactId>
          <version>1.15.0</version>
          <systemPath>C:\Users\dell\Desktop\flink-connector-jdbc-1.15.0.jar</systemPath>
          <scope>system</scope>
        </dependency>
      </dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    5. runtime

    专门用于编译时不需要,但是运行时需要的jar包。比如mysql-connector-java-8.0.29.jar驱动包

      <dependencies>
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>8.0.29</version>
          <scope>runtime</scope>
        </dependency>
      </dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    6. optional可选依赖

    有时会有optional为true的可选依赖,如下所示:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <version>2.7.1</version>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    表示该依赖对于项目来说,可有可无。其核心含义是:Project A依赖Project B,B 中一部分A用不到的代码依赖了C,那么对A来说C就是可有可无的

    7. 将jar包安装到maven仓库

    7.1 背景

    有时别人只提供一个jar包给你,就需要我们将该jar包安装到本地仓库中,供我们使用

    7.2 将jar包安装到maven仓库

    我们准备一个jar包,名称为maven-learn-0.1.jar

    使用install插件的install-file目标,将jar包安装到maven仓库。如下所示

    C:\Users\dell>mvn install:install-file -Dfile=C:\Users\dell\Desktop\maven-learn-0.1.jar ^
    More? -DgroupId=com.hh ^
    More? -DartifactId=maven-learn ^
    More? -Dversion=0.1 ^
    More? -Dpackaging=jar
    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------< org.apache.maven:standalone-pom >-------------------
    [INFO] Building Maven Stub Project (No POM) 1
    [INFO] --------------------------------[ pom ]---------------------------------
    [INFO]
    [INFO] --- maven-install-plugin:2.4:install-file (default-cli) @ standalone-pom ---
    [INFO] Installing C:\Users\dell\Desktop\maven-learn-0.1.jar to D:\install_software\maven\apache-maven-3.8.1\repository\com\hh\maven-learn\0.1\maven-learn-0.1.jar
    [INFO] Installing C:\Users\dell\AppData\Local\Temp\mvninstall1123739996078159064.pom to D:\install_software\maven\apache-maven-3.8.1\repository\com\hh\maven-learn\0.1\maven-learn-0.1.pom
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  0.730 s
    [INFO] Finished at: 2022-07-01T16:28:48+08:00
    [INFO] ------------------------------------------------------------------------
    
    C:\Users\dell>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    其中定义的groupId、artifactId、version可以和源jar包maven-learn-0.1.jar中定义的不一样

    然后就可以对导入的依赖,进行引用使用了

  • 相关阅读:
    Redis高可用之持久化、主从复制(附配置实例)
    Web系统常见安全漏洞介绍及解决方案-XSS攻击
    vuejs - - - - - 递归组件的实现
    2023年亚太杯数学建模亚太赛C题思路解析+代码+论文
    使用qemu运行risc-v ubuntu
    DDR时序
    KMP总结
    JAVA德纳影城售票管理计算机毕业设计Mybatis+系统+数据库+调试部署
    华为数通方向HCIP-DataCom H12-821题库(多选题:01-20)
    Linux输入设备应用编程(触摸屏获取坐标信息)
  • 原文地址:https://blog.csdn.net/yy8623977/article/details/125442291