Maven Dependency Scope

本文详细介绍了Maven中六种依赖范围(compile、provided、runtime、test、system、import)的概念及其应用场景,包括如何在不同场景下配置依赖,以及它们在项目构建过程中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方API描述

 

Dependency scope 是用来限制Dependency的作用范围的, 影响maven项目在各个生命周期时导入的package的状态。

自从2.0.9后,新增了1种,现在有了6种scope:

  • compile
    默认的scope,表示 dependency 都可以在生命周期中使用。而且,这些dependencies 会传递到依赖的项目中。
  • provided
    跟compile相似,但是表明了dependency 由JDK或者容器提供,例如Servlet AP和一些Java EE APIs。这个scope 只能作用在编译和测试时,同时没有传递性。
  • 使用这个时,不会将包打入本项目中,只是依赖过来。   
  • 使用默认或其他时,会将依赖的项目打成jar包,放入本项目的Lib里
  • when building a web application for the Java Enterprise Edition, you would set the dependency on the Servlet API and related Java EE APIs to scope provided because the web container provides those classes. This scope is only available on the compilation and test classpath, and is not transitive.
  • Xml代码   收藏代码
    1. <!-- Servlet -->  
    2.         <dependency>  
    3.             <groupId>javax.servlet</groupId>  
    4.             <artifactId>servlet-api</artifactId>  
    5.             <version>2.5</version>  
    6.             <scope>provided</scope>  
    7.         </dependency>  
    8.         <dependency>  
    9.             <groupId>javax.servlet.jsp</groupId>  
    10.             <artifactId>jsp-api</artifactId>  
    11.             <version>2.1</version>  
    12.             <scope>provided</scope>  
    13.         </dependency>  
     
  • runtime
    表示dependency不作用在编译时,但会作用在运行和测试时
  • test
    表示dependency作用在测试时,不作用在运行时。
  • system
    跟provided 相似,但是在系统中要以外部JAR包的形式提供,maven不会在repository查找它。 例如:

<project>
...
<dependencies>
  <dependency>
   <groupId>javax.sql</groupId>
   <artifactId>jdbc-stdext</artifactId>
   <version>2.0</version>
   <scope>system</scope>
   <systemPath>${java.home}/lib/rt.jar</systemPath>
  </dependency>
</dependencies>
...
</project>

 

 

  • import (Maven 2.0.9 之后新增)
    它只使用在<dependencyManagement>中,表示从其它的pom中导入dependency的配置,例如:    This scope is only used on a dependency of type pom in the <dependencyManagement> section. It indicates that the specified POM should be replaced with the dependencies in that POM's <dependencyManagement> section. Since they are replaced, dependencies with a scope of import do not actually participate in limiting the transitivity of a dependency.

<project>

<modelVersion>4.0.0</modelVersion>

<groupId>maven</groupId>

<artifactId>B</artifactId>

<packaging>pom</packaging>

<name>B</name>

<version>1.0</version>

 

<dependencyManagement>

    <dependencies>

      <dependency>

        <groupId>maven</groupId>

        <artifactId>A</artifactId>

        <version>1.0</version>

        <type>pom</type>

        <scope>import</scope>

      </dependency>

      <dependency>

        <groupId>test</groupId>

        <artifactId>d</artifactId>

        <version>1.0</version>

      </dependency>

    </dependencies>

</dependencyManagement>

</project>

B项目导入A项目中的包配置


http://uule.iteye.com/blog/2087485

### Maven Dependency 参数详解及用法 #### 1. 基本结构 Maven依赖项通常在`pom.xml`文件中声明,基本结构如下: ```xml <dependencies> <dependency> <groupId>com.example</groupId> <artifactId>example-artifact</artifactId> <version>1.0.0</version> <scope>compile</scope> <type>jar</type> <optional>true</optional> <exclusions> <exclusion> <groupId>*</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> </dependencies> ``` 此配置指定了一个具体的依赖项及其属性[^1]。 #### 2. 关键参数说明 ##### groupId, artifactId 和 version 这三个是最基础也是最重要的字段。它们共同唯一标识了一个特定的库或组件。 - `groupId`: 定义了项目所属组的ID。 - `artifactId`: 表示实际构件的名字。 - `version`: 明确指出使用的具体版本号。 这些信息用于定位远程仓库中的资源位置并下载到本地环境[^3]。 ##### scope (作用范围) 决定了该依赖将在哪个阶段被引入以及如何影响编译过程: - **compile**: 默认值;适用于所有阶段(编译、测试、运行)。 - **provided**: 编译期有效但在部署时不打包入最终产物内。 - **runtime**: 运行时期间才需要用到,在编译期间不需要。 - **test**: 只有执行单元测试时才会加载进来。 - **system**: 类似于 provided ,但是还需要指定 systemPath 属性来指向确切的位置。 ##### type (类型) 默认为 jar 文件形式,默认情况下可以省略。如果要引用其他类型的包,则需显式设定,比如 war 或 pom 等特殊格式。 ##### optional (可选标志) 当设为 true 时表示当前模块并不强制要求这个依赖存在,即下游使用者可以选择忽略它而不必担心构建失败的问题。 ##### exclusions (排除列表) 允许开发者从传递性依赖链条里移除某些不必要的子依赖,从而减少潜在冲突的可能性。通过定义 exclusion 节点实现这一点[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值