原文: https://howtodoinjava.com/maven/maven-dependency-scopes/
Maven 依赖范围属性用于指定相对于不同生命周期阶段(构建,测试,运行时等)的依赖项可见性。 Maven 提供了六个范围,即compile,provided,runtime,test,system和import。
Table of Contents1\. Compile Scope2\. Provided Scope3\. Runtime Scope4\. Test Scope5\. System Scope6\. Import Scope7\. Transitivity Resolution
Maven 依赖范围 – compile
这是 maven 默认范围。 构建,测试和运行项目需要具有compile范围的依赖项。
在大多数情况下,必须使用范围compile才能将import语句解析为您的 Java 类源代码。
<dependencies><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.14</version><!-- You can ommit this because it is default --><scope>compile</scope></dependency></dependencies>
Maven 依赖范围 – provided
Maven 依赖范围provided在构建和测试期间用于整个项目。 它们也需要运行,但是不应导出,因为依赖项将由运行时提供,例如,由 servlet 容器或应用服务器提供。
<dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>3.0.1</version><scope>provided</scope></dependency>
Maven 依赖范围 – runtime
不需要构建具有 maven 依赖范围runtime的依赖项,但它们是测试和运行项目的类路径的一部分。
<dependency><groupId>com.thoughtworks.xstream</groupId><artifactId>xstream</artifactId><version>1.4.4</version><scope>runtime</scope></dependency>
Maven 依赖范围 – test
不需要使用 maven 依赖范围test来构建和运行项目。 需要它们来编译和运行单元测试。
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency>
Maven 依赖范围 – system
具有system的依赖项与具有范围provided的依赖项相似。 唯一的区别是system依赖项不是从远程仓库中检索到的。 它们位于项目的子目录下,并从那里进行引用。 有关更多详细信息,请参见外部依赖项。
<dependency><groupId>extDependency</groupId><artifactId>extDependency</artifactId><scope>system</scope><version>1.0</version><systemPath>${basedir}\war\WEB-INF\lib\extDependency.jar</systemPath></dependency>
Maven 依赖范围 – import
import范围仅在dependencyManagement部分中的类型为pom的依赖项上受支持。 它在指定的 POM 的dependencyManagement部分中指示要用有效的依赖项列表替换的依赖项。
<dependencyManagement><dependencies><dependency><groupId>other.pom.group.id</groupId><artifactId>other-pom-artifact-id</artifactId><version>SNAPSHOT</version><scope>import</scope><type>pom</type></dependency></dependencies></dependencyManagement>
Maven 依赖项可传递性解析
当您包含一个 maven 依赖项并且它具有它自己的其他依赖项(即传递性依赖项)时,您可能还想弄清楚这些传递性依赖项的范围。
让我们用一个简单的表来了解 maven 传递依赖项。 在此表中,如果在左列中将范围设置为依赖项,则在顶部行的可传递依赖项将导致在其交点处列出的范围。
| 依赖项 | 编译 | 提供 | 运行 | 测试 |
|---|---|---|---|---|
compile |
compile |
– | runtime |
– |
provided |
provided |
– | provided |
– |
runtime |
runtime |
– | runtime |
– |
test |
test |
– | test |
– |
将我的问题放在评论部分。
学习愉快!
