Maven 依赖范围

Maven 依赖范围

原文: https://howtodoinjava.com/maven/maven-dependency-scopes/

Maven 依赖范围属性用于指定相对于不同生命周期阶段(构建,测试,运行时等)的依赖项可见性。 Maven 提供了六个范围,即compileprovidedruntimetestsystemimport

Table of Contents

1\. Compile Scope
2\. Provided Scope
3\. Runtime Scope
4\. Test Scope
5\. System Scope
6\. Import Scope
7\. 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

将我的问题放在评论部分。

学习愉快!