精华内容
下载资源
问答
  • optional可选依赖,表示当一个项目依赖添加上optional=true的选项后,子项目中将不会包含这个依赖。常用于解决jar包冲突问题,和exclusion排除jar有异曲同工之妙,假设a项目引入了以下依赖: <!--伪代码...

    optional可选依赖,表示当一个项目中的依赖添加上optional=true的选项后,子项目中将不会包含这个依赖。常用于解决jar包冲突问题,和exclusion排除jar有异曲同工之妙,假设a项目中引入了以下依赖:

    <!--伪代码写法-->
    <project>
    	<groupId>com.xxx.test</groupId>
    	<artifactId>test-a</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<packaging>pom</packaging>
        <dependency>
    	    <groupId>org.springframework.boot</groupId>
    	    <artifactId>spring-boot-configuration-processor</artifactId>
        </dependency>
    </project>

    b项目引入了a项目后发现spring-boot-configuration-processor和当前项目存在版本冲突问题,解决方式:

    一、b项目中使用exclusion排除

    <dependency>
      <groupId>com.xxx.test</groupId>
      <artifactId>test-a</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <exclusions>
         <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
         </exclusion>
      </exclusions>
    </dependency>

    二、a项目中使用optional选项

    <project>
    	<groupId>com.xxx.test</groupId>
    	<artifactId>test-a</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<packaging>pom</packaging>
            <dependency>
    	    <groupId>org.springframework.boot</groupId>
    	    <artifactId>spring-boot-configuration-processor</artifactId>
                <optional>true</optional>
            </dependency>
    </project>

    推荐阅读:一文带你了解maven依赖中的scope选项

                      一文带你了解maven中的dependencyManagement

     

    展开全文
  • 举例如下: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId>...scope的值有以下几种可能,进行分

    举例如下

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <scope>provided</scope>
    </dependency>
    

    scope的值有以下几种可能,进行分情况讲解:
    compile
    默认就是compile,什么都不配置也就是意味着compile。compile表示被依赖项目需要参与当前项目的编译,当然后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去。默认的scope,在部署的时候将会打包到lib目录下,项目在编译,测试,运行阶段都需要

    test
    scope为test表示依赖项目仅仅参与测试相关的工作,在编译和运行环境下都不会被使用,更别说打包了。

    runntime
    runntime这个scope,仅仅适用于运行环境,在编译和测试环境下都不会被使用

    provided
    provided适合在编译和测试的环境,他和compile很接近,但是provide仅仅需要在编译和测试阶段,同样provide将不会被打包到lib目录下。

    system
    从参与度来说,也provided相同,不过被依赖项不会从maven仓库抓,而是从本地文件系统拿,一定需要配合systemPath属性使用。

    scope的依赖传递
    A–>B–>C。当前项目为A,A依赖于B,B依赖于C。知道B在A项目中的scope,那么怎么知道C在A中的scope呢?答案是:
    当C是test或者provided时,C直接被丢弃,A不依赖C;
    否则A依赖C,C的scope继承于B的scope。

    为什么需要区分这些scope
    可以用来限制dependency的范围可以在不同的环境下打包不同的jar包,比如junit测试类的jar包不需要在编译运行的时候,就可以设置scope为test。

    最后还有一个true是什么意思,怎么用的呢?

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <optional>true</optional>
    </dependency>
    

    例如上面的例子,在SpringBoot官网文件中你可以得到解释就是,true的话,其他项目依赖此项目也不会进行传递,只能本项目使用。

    展开全文
  • 主要介绍了详解Maven optional关键字透彻图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • optional表示可选依赖,比如项目依赖了dubbo-spring-boot-starter <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <...

    optional表示可选依赖,比如项目依赖了dubbo-spring-boot-starter

    <dependency>
          <groupId>org.apache.dubbo</groupId>
          <artifactId>dubbo-spring-boot-starter</artifactId>
          <version>${dubbo.version}</version>
    </dependency>
    

    上面的依赖又依赖了spring-boot-starter

    <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter</artifactId>
          <optional>true</optional>
    </dependency>
    

    此时如果项目不显示添加依赖spring-boot-starter,那么项目是不会依赖到
    spring-boot-starter的。

    展开全文
  • Maven实战-maven中的可选依赖optional

    万次阅读 多人点赞 2018-05-11 16:21:44
    在一些项目,我们知道用exclusion排除一些依赖包,这属于依赖排除(Dependency Exclusions),还有一种就是今天所说的可选依赖Optional Dependencies)。主要还是讲怎么用。 准备工作 准备两个工程,简单点...

    在一些项目中,我们知道用exclusion排除一些依赖包,这属于依赖排除(Dependency Exclusions),还有一种就是今天所说的可选依赖(Optional Dependencies)。主要还是讲怎么用。

    准备工作

    准备两个工程,简单点,就是A和B

    只看POM文件,这是A的pom文件。

    <?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">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>A</groupId>
        <artifactId>A</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
            <dependency>
                <groupId>joda-time</groupId>
                <artifactId>joda-time</artifactId>
                <version>2.9.9</version>
            </dependency>
        </dependencies>
    </project>

    这是B的pom文件:

    <?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">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>B</groupId>
        <artifactId>B</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
            <dependency>
                <groupId>A</groupId>
                <artifactId>A</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
        </dependencies>
    </project>

    在这种情况下,joda-time包在B工程会被正常引用。

    加入optional

    在A工程对joda-time添加optional选项,这时在B工程中,joda-time依赖包会消失.

        <dependencies>
            <dependency>
                <groupId>joda-time</groupId>
                <artifactId>joda-time</artifactId>
                <version>2.9.9</version>
                <optional>true</optional>
            </dependency>
        </dependencies>

    如果想引这个包,需要在A项目中设optional为false或者去除optional,或者在B项目中显式调用。

    parent 继承的情况

    如果A的pom像下面这样配置

    <?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">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>A</groupId>
        <artifactId>A</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>joda-time</groupId>
                    <artifactId>joda-time</artifactId>
                    <version>2.9.9</version>
                    <optional>true</optional>
                </dependency>
            </dependencies>
        </dependencyManagement>
    </project>

    B再去引用的话,还是可以正常引用joda-time包,optional选项在统一控制版本的情况下会失效。

    <?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">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>B</groupId>
        <artifactId>B</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <parent>
            <groupId>A</groupId>
            <artifactId>A</artifactId>
            <version>1.0-SNAPSHOT</version>
        </parent>
    
        <dependencies>
            <dependency>
                <groupId>joda-time</groupId>
                <artifactId>joda-time</artifactId>
            </dependency>
        </dependencies>
    </project>
    展开全文
  • 应用场景:projectA 依赖projectB, projectB 依赖projectC时 <dependency> <groupId>com.itear.projectC</groupId> <artifactId>projectC</artifactId> <version>0.0.1-SNA....
  • Optional定义后,该依赖只能在本项目传递,不会传递到引用该项目的父项目,父项目需要主动引用该依赖才行。 Exclusions则是主动排除子项目传递过来的依赖。 假如有三个项目分别为A项目、B项目、C项目,依赖...
  • 1、父模块的依赖中不添加<optional>true</optional> 父模块pom文件: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=...
  • Maven中optional和scope元素的使用,你弄明白了?

    千次阅读 多人点赞 2020-12-02 07:10:23
    在梳理项目的过程发现很多开发同学对Maven依赖文件的配置并不了解,特别是对Maven的optional元素和scope元素的使用也非常随意。这就会导致发布的jar包或war包非常“胖”、编译速度慢,而且还很容易生产jar冲突等...
  • 在一些项目,我们知道用exclusion排除一些依赖包,这属于依赖排除(Dependency Exclusions),还有一种就是今天所说的可选依赖Optional Dependencies)。主要还是讲怎么用。 假如我们目前有两个项目:项目A 和...
  • Maven依赖optional元素

    万次阅读 2016-11-18 19:08:14
    Maven依赖optional元素pom.xml里面依赖dependency的元素标签optional的作用假如你的Project A的某个依赖D添加了true,当别人通过pom依赖Project A的时候,D不会被传递依赖进来当你依赖某各工程很庞大或很可能与...
  • 本节介绍Maven中的可选依赖依赖性排除功能。 【原文链接】 Optional 依赖 如果明确一个 project 无论出于什么原因考虑都不可能继续分割成子项目,则其依赖可以使用 optional。 如果其他 project 依赖了 使用 ...
  • maven scope与optional作用

    2021-08-10 09:49:24
    <scope>runtime</scope> 以上scope设置,说明仅适用运行和测试环节,在编译环境下不会被使用 <optional>...以上optional设置,说明项目之间依赖不传递,子项目不引用此jar包 ...
  • Maven 依赖范围和依赖传递详解

    千次阅读 2018-11-08 18:38:36
    Maven 依赖范围和依赖传递详解 18.10.8 松江图书馆 ...Maven 依赖范围和依赖传递详解 ...maven pom配置 exclusion标签 手动去除依赖 dependencyManagement和dependencise的区别 ...
  • Maven依赖详细理解

    千次阅读 2019-06-08 15:26:38
    Maven依赖理解1 简介2 依赖的配置3 依赖的范围4 传递性依赖4.1 传递性依赖和依赖调解5 依赖调解6 可选依赖7 总结 1 简介  在Maven项目,有一个核心文件pom.xml。POM项目对象模型定义了项目的基本信息,用于描述心...
  • [Maven]optional标签

    千次阅读 2019-05-04 18:25:54
    Optional定义后,该依赖只能在本项目传递,不会传递到引用该项目的父项目,父项目需要主动引用该依赖才行。 例如: A项目中依赖引用了test-artifactId(如上代码块显示), B项目依赖引用了A项目,那么A项目...
  • 依赖管理是maven提供的主要功能之一...在添加依赖项时,我们可以使用optional标志,或将scope设置为“provided”。在这两种情况下,依赖关系都将在声明它们的模块的classpath,但是使用将它们定义为依赖关系的模块不
  • Maven 依赖管理

    2020-12-19 07:41:44
    Maven 依赖管理Maven 一个核心的特性就是依赖管理。当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven 提供了一种高度控制的方法。可...
  • 1.Maven中依赖概述 Maven中依赖关系是有传递性的。例如:项目B依赖项目C(B —> C),如果有一个项目A依赖项目B(A —> B)的话,那么项目A也会依赖项目C(A —> C)。虽然,这种依赖的自动传递性给我们...
  • Maven依赖中的scope详解

    2020-12-22 03:17:17
    Maven的一个哲学是惯例优于配置(Convention Over Configuration), Maven默认的依赖配置项,scope的默认值是compile,项目经常傻傻的分不清,直接默认了。今天梳理一下maven的scope。scope的分类compile默认就是...
  • maven provided 与 optional 的区别
  • Maven中optional和scope元素 optional元素 optional:可选的,用来控制依赖是否向下传递;默认为false,表示依赖向下传递,如果设置为true,表示不向下传递; 例如热部署依赖: <!--devtools 热部署--> <...
  • 这里以Spring Boot项目的使用为例,比如我们在项目经常使用的热部署组件spring-boot-devtools,就可以使用optional元素来进行定义,对应pom文件配置如下: <!--devtools 热部署--> <dependency>
  • Maven】pomoptional元素是什么?

    万次阅读 多人点赞 2018-10-09 21:41:52
    om.xml里面依赖dependency的元素标签optional的作用 假如你的Project A的某个依赖D添加了&lt;optional&gt;true&lt;/optional&gt;, &lt;dependency&gt;  &lt;groupId&gt;org....
  • Maven依赖机制简介

    2020-12-21 12:44:19
    大纲:传递性依赖排除、可选依赖依赖范围依赖管理导入依赖系统依赖传递性依赖传递性依赖Maven2.0的新特性。假设你的项目依赖于一个库,而这个库又依赖于其他库。你不必自己去找出所有这些依赖,你只需要加...
  • Maven依赖配置和依赖范围

    千次阅读 2017-03-06 17:27:32
    Maven依赖配置一个dependency的声明可以包含以下元素: <groupId>org.apache.kafka <artifactId>kafka-clients <version>0.8.2.2 <s
  • 详述 Maven 依赖范围及依赖调节原则

    千次阅读 2017-09-23 17:49:44
    当在我们 POM 文件配置 Maven 依赖的时候,常见的格式如下: ... <groupId>... <artifactId>... <version>...</versio
  • Maven依赖关系

    千次阅读 2018-04-18 17:37:26
    我们在平时的项目开发也是同理,你需要依赖一些东西才能实现相应的功能,但相应的功能或许也可以依赖其它的东西实现,比如数据库操作吧,你可以依赖hibernate,但你也可以通过mybatis来做。这就是所谓的依赖关系咯...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,896
精华内容 9,558
关键字:

maven依赖中optional