`
y806839048
  • 浏览: 1126394 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Maven的Scope区别笔记

阅读更多

依赖的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开发者笔记

    此外,Maven的依赖范围(scope)如编译(compile)、测试(test)、运行时(runtime)等也会影响依赖的引入。 插件是Maven的强大扩展机制,允许开发人员执行自定义任务。常见的Maven插件有Surefire Plugin用于运行...

    maven2使用笔记

    ### Maven2 使用笔记 #### Maven2简介 Maven2是一个非常强大的开源项目管理与构建工具。它通过一种项目对象模型(Project Object Model, POM)来管理项目的构建、报告和文档。POM是一个XML文件(通常命名为`pom.xml...

    Maven3实战笔记

    【Maven3实战笔记】 Maven3是一款强大的Java项目管理和集成工具,由Apache软件基金会开发。它通过提供一套标准化的构建、依赖管理和项目信息管理的方式来简化项目的生命周期。本实战笔记将深入探讨Maven3的核心概念...

    maven课堂笔记2.pdf

    【Maven课堂笔记】 在Java开发环境中,IntelliJ IDEA(IDEA)和Eclipse都是常用的集成开发环境,而Maven作为一个项目管理和构建工具,能够帮助开发者管理项目依赖、构建和自动化测试。本笔记主要围绕如何在IDEA和...

    maven使用笔记

    Maven 使用笔记 Maven 是一个强大的项目管理和构建工具,广泛应用于Java开发领域。它通过使用一种标准的项目对象模型(Project Object Model, POM),能够自动化处理项目的构建、依赖管理和报告生成。这个笔记将...

    Maven笔记.docx

    **Maven笔记** Maven是Apache组织开发的一款Java项目管理工具,它的主要功能包括项目构建、依赖管理和仓库管理。Maven使得Java开发更加规范和高效,尤其在大型团队协作中,能够有效地解决版本冲突和自动化构建的...

    Maven中文开发指南+实战教程+学习笔记

    **Maven学习笔记** 1. **高级特性** - Maven Profiles允许根据环境条件选择不同的配置。 - Inheritance和Aggregation进一步优化POM管理,减少重复配置。 - Maven的远程资源插件可以集成外部资源,如配置文件。 ...

    maven笔记

    ** Maven笔记 ** Maven是Java开发中的一个项目管理和综合工具,它简化了构建、依赖管理和项目的生命周期。本文将深入探讨Maven的核心概念、配置以及如何在实际开发中有效利用它。 ### Maven核心概念 1. **项目...

    9_Maven笔记.pdf

    此外,Maven还支持范围(scope)的概念,如`compile`、`runtime`、`test`等,以便在不同阶段使用不同的依赖。 总结来说,Maven通过提供标准化的项目结构、自动化依赖管理和构建流程,使得Java项目的管理更加规范和...

    maven下载安装与配置笔记attention-model-for-net

    &lt;scope&gt;test&lt;/scope&gt; ``` **Maven的常用命令**包括: - `mvn clean`:清理目标目录,删除构建生成的文件。 - `mvn compile`:编译源代码。 - `mvn test`:运行测试。 - `mvn package`:打包项目,如生成JAR或...

    Drools6-笔记

    &lt;scope&gt;test&lt;/scope&gt; ``` ##### 2.2 配置User Libraries 1. **添加Drools和JUnit库**:在项目的类路径中添加Drools和JUnit库。 2. **建立Drools的UserLibraries**:在IDE中配置UserLibraries,将Drools和...

    java web笔记

    Maven的Dependency Scope定义了依赖项的可见性和应用范围,包括compile、provided、runtime、test和system等。compile是默认的scope,表明依赖项在编译、测试和打包时都需要;provided表示运行时由JDK或容器提供,不...

    SpringCloud笔记.pdf

    &lt;scope&gt;import&lt;/scope&gt; ``` 其中`&lt;spring-cloud.version&gt;`标签的值会是具体的版本号,如Hoxton.SR11。父工程的groupId、artifactId和version也应该配置妥当。 ### 2. 新建子模块 在父工程下,可以新建多个...

    Spring的学习笔记

    以下将详细介绍Spring学习笔记中的主要知识点。 **面向抽象编程** 面向抽象编程是一种设计原则,强调在代码中使用接口或抽象类,而不是具体实现类。这使得系统更具有灵活性,易于扩展和维护。在Spring框架中,我们...

    MyBatis狂神说最全笔记

    ### MyBatis狂神说最全笔记解析 #### 一、MyBatis简介 ##### 1.1 什么是MyBatis? MyBatis是一款优秀的持久层框架,它支持自定义SQL查询、存储过程以及高级映射功能。通过使用MyBatis,开发人员可以避免手动编写...

Global site tag (gtag.js) - Google Analytics