Maven 依赖范围
Maven 依赖范围
Maven 依赖范围属性用于指定相对于不同生命周期阶段(构建,测试,运行时等)的依赖项可见性。 Maven 提供了六个范围,即compile
,provided
,runtime
,test
,system
和import
。
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 |
– |
将我的问题放在评论部分。
评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果