依赖是maven提供的主要功能之一。无论我们需要什么依赖项,我们只需要将它们添加到POM.xml中。由于maven,所有必需的类和资源都会自动添加到项目的类路径中。一.依赖关系在POM
依赖是maven提供的主要功能之一。无论我们需要什么依赖项,我们只需要将它们添加到POM.xml中。由于maven,所有必需的类和资源都会自动添加到项目的类路径中。
一.依赖关系
在POM 4中,<>这
*默认值compile适用于所有阶段,并将随项目一起发布。
*假设,类似于编译,预计JDK、容器或消费者将提供此依赖关系。比如servlet.jar
* runtime,只在运行时使用,如JDBC驱动,适用于运行和测试阶段。
* test,仅在测试期间使用,用于编译和运行测试代码。不会随项目一起发布。
* system,与provided类似,需要显式提供一个包含依赖项的jar,Maven不会在存储库中查找。
请看下面的例子:
& lt依赖性& gt
& ltgroupId & gtorg . spring framework . boot </groupId >
& ltartifactId & gt弹簧-启动-启动-Tomcat </artifact id >
& lt范围& gt提供& lt/scope >
& lt/dependency >
二。范围参数值作用域的值有以下几种可能,将在不同的情况下进行解释。
(1)编译
缺省值是compile,没有配置任何东西,这意味着编译。编译意味着依赖项目需要参与当前项目的编译。当然后续的测试和运行周期也有涉及,这是一种很强的依赖性。包装的时候,一般都需要包含。的默认作用域将在部署时打包在lib目录中,项目在编译、测试和运行阶段都需要它。
(2)测试
范围测试是指依赖项目只参与测试相关的工作,不会在编译运行环境中使用,更不用说打包了。
(3)运行时间
它只适用于运行环境,不会用于编译和测试环境。
(4)提供
在一个适合编译测试的环境下,很接近编译,但是provided只需要在编译测试阶段,同样provided也不会打包在lib目录下。
(5)系统
参与方面,也和提供的一样,但是依赖项不会从maven仓库抓取,而是从本地文件系统抓取,必须和systemPath属性配合使用。
三。范围的相关传输a->b->丙.当前项目是A,A依赖于B,B依赖于C,知道了B在项目A中的作用域,怎么知道C在项目A中的作用域呢?答案是:
测试或提供C时,直接丢弃C,A不依赖C;
否则,A依赖于C,C的作用域继承B的作用域。
为什么需要区分这些范围?
它可以用来限制依赖的范围。不同的jar包可以在不同的环境中打包。比如junit测试类的jar包,可以设置成不编译不运行就测试。
四。true & lt/可选& gt属性
还有最后一个
& lt依赖性& gt
& ltgroupId & gtorg . spring framework . boot </groupId >
& ltartifactId & gtspring-boot-devtools/artifact id >
& lt可选& gttrue & lt/可选& gt
& lt/dependency >
在添加依赖项时,我们可以使用可选的熟悉度或将范围设置为“提供”。在这两种情况下,依赖项都会在声明它们的模块的类路径中,但是使用将它们定义为依赖项的模块不会在其他项目中传递它们,也就是不会形成依赖项传递。
例如,在上面的例子中,您可以在SpringBoot官网文件中获得<>