依赖的Scope
scope定义了类包在项目的使用阶段。项目阶段包括: 编译,运行,测试和发布。
确保能编译通过,基本就能运行,最多在用到需要的哪个类(jar没有)时才报错
分类说明
compile
默认scope为compile,表示为当前依赖参与项目的编译、测试和运行阶段,属于强依赖。打包之时,会达到包里去。
test
该依赖仅仅参与测试相关的内容,包括测试用例的编译和执行,比如定性的Junit。
runtime
依赖仅参与运行周期中的使用。一般这种类库都是接口与实现相分离的类库,比如JDBC类库,在编译之时仅依赖相关的接口,在具体的运行之时,才需要具体的mysql、oracle等等数据的驱动程序。
此类的驱动都是为runtime的类库。
provided
该依赖在打包过程中,不需要打进去,这个由运行的环境来提供,比如tomcat或者基础类库等等,事实上,该依赖可以参与编译、测试和运行等周期,与compile等同。区别在于打包阶段进行了exclude操作。
system
使用上与provided相同,不同之处在于该依赖不从maven仓库中提取,而是从本地文件系统中提取,其会参照systemPath的属性进行提取依赖。
import
这个是maven2.0.9版本后出的属性,import只能在dependencyManagement的中使用,能解决maven单继承问题,import依赖关系实际上并不参与限制依赖关系的传递性。
systemPath
当maven依赖本地而非repository中的jar包,sytemPath指明本地jar包路径,例如:
<dependency>
<groupid>org.hamcrest</groupid>
<artifactid>hamcrest-core</artifactid>
<version>1.5</version>
<scope>system</scope>
<systempath>${basedir}/WebContent/WEB-INF/lib/hamcrest-core-1.3.jar</systempath>
</dependency>
dependency中的type
引入某一个依赖时,必须指定type,这是因为用于匹配dependency引用和dependencyManagement部分的最小信息集实际上是{groupId,artifactId,type,classifier}。在很多情况下,这些依赖关系将引用没有classifier的jar依赖。这允许我们将标识设置为{groupId,artifactId},因为type的默认值是jar,并且默认classifier为null。
type的值一般有jar、war、pom等,声明引入的依赖的类型
dependency中的classifier
Classifier可能是最容易被忽略的Maven特性,但它确实非常重要,我们也需要它来帮助规划坐标。设想这样一个情况,有一个jar项目,就说是 dog-cli-1.0.jar 吧,运行它用户就能在命令行上画一只小狗出来。现在用户的要求是希望你能提供一个zip包,里面不仅包含这个可运行的jar,还得包含源代码和文档,换句话说,这是比较正式的分发包。这个文件名应该是怎样的呢?dog-cli-1.0.zip?不够清楚,仅仅从扩展名很难分辨什么是Maven默认生成的构件,什么是额外配置生成分发包。如果能是dog-cli-1.0-dist.zip就最好了。这里的dist就是classifier,默认Maven只生成一个构件,我们称之为主构件,那当我们希望Maven生成其他附属构件的时候,就能用上classifier。常见的classifier还有如dog-cli-1.0-sources.jar表示源码包,dog-cli-1.0-javadoc.jar表示JavaDoc包等等。
classifier它表示在相同版本下针对不同的环境或者jdk使用的jar,如果配置了这个元素,则会将这个元素名在加在最后来查找相应的jar,例如:
<classifier>jdk17</classifier>
<classifier>jdk18</classifier>
总结
scope的概念在maven的依赖定义中非常重要,大家需要搞清楚他们的关系和适用范围。
相关推荐
此外,Maven的依赖范围(scope)如编译(compile)、测试(test)、运行时(runtime)等也会影响依赖的引入。 插件是Maven的强大扩展机制,允许开发人员执行自定义任务。常见的Maven插件有Surefire Plugin用于运行...
### Maven2 使用笔记 #### Maven2简介 Maven2是一个非常强大的开源项目管理与构建工具。它通过一种项目对象模型(Project Object Model, POM)来管理项目的构建、报告和文档。POM是一个XML文件(通常命名为`pom.xml...
【Maven3实战笔记】 Maven3是一款强大的Java项目管理和集成工具,由Apache软件基金会开发。它通过提供一套标准化的构建、依赖管理和项目信息管理的方式来简化项目的生命周期。本实战笔记将深入探讨Maven3的核心概念...
【Maven课堂笔记】 在Java开发环境中,IntelliJ IDEA(IDEA)和Eclipse都是常用的集成开发环境,而Maven作为一个项目管理和构建工具,能够帮助开发者管理项目依赖、构建和自动化测试。本笔记主要围绕如何在IDEA和...
Maven 使用笔记 Maven 是一个强大的项目管理和构建工具,广泛应用于Java开发领域。它通过使用一种标准的项目对象模型(Project Object Model, POM),能够自动化处理项目的构建、依赖管理和报告生成。这个笔记将...
**Maven笔记** Maven是Apache组织开发的一款Java项目管理工具,它的主要功能包括项目构建、依赖管理和仓库管理。Maven使得Java开发更加规范和高效,尤其在大型团队协作中,能够有效地解决版本冲突和自动化构建的...
**Maven学习笔记** 1. **高级特性** - Maven Profiles允许根据环境条件选择不同的配置。 - Inheritance和Aggregation进一步优化POM管理,减少重复配置。 - Maven的远程资源插件可以集成外部资源,如配置文件。 ...
** Maven笔记 ** Maven是Java开发中的一个项目管理和综合工具,它简化了构建、依赖管理和项目的生命周期。本文将深入探讨Maven的核心概念、配置以及如何在实际开发中有效利用它。 ### Maven核心概念 1. **项目...
此外,Maven还支持范围(scope)的概念,如`compile`、`runtime`、`test`等,以便在不同阶段使用不同的依赖。 总结来说,Maven通过提供标准化的项目结构、自动化依赖管理和构建流程,使得Java项目的管理更加规范和...
<scope>test</scope> ``` **Maven的常用命令**包括: - `mvn clean`:清理目标目录,删除构建生成的文件。 - `mvn compile`:编译源代码。 - `mvn test`:运行测试。 - `mvn package`:打包项目,如生成JAR或...
<scope>test</scope> ``` ##### 2.2 配置User Libraries 1. **添加Drools和JUnit库**:在项目的类路径中添加Drools和JUnit库。 2. **建立Drools的UserLibraries**:在IDE中配置UserLibraries,将Drools和...
Maven的Dependency Scope定义了依赖项的可见性和应用范围,包括compile、provided、runtime、test和system等。compile是默认的scope,表明依赖项在编译、测试和打包时都需要;provided表示运行时由JDK或容器提供,不...
<scope>import</scope> ``` 其中`<spring-cloud.version>`标签的值会是具体的版本号,如Hoxton.SR11。父工程的groupId、artifactId和version也应该配置妥当。 ### 2. 新建子模块 在父工程下,可以新建多个...
以下将详细介绍Spring学习笔记中的主要知识点。 **面向抽象编程** 面向抽象编程是一种设计原则,强调在代码中使用接口或抽象类,而不是具体实现类。这使得系统更具有灵活性,易于扩展和维护。在Spring框架中,我们...
### MyBatis狂神说最全笔记解析 #### 一、MyBatis简介 ##### 1.1 什么是MyBatis? MyBatis是一款优秀的持久层框架,它支持自定义SQL查询、存储过程以及高级映射功能。通过使用MyBatis,开发人员可以避免手动编写...