Maven的scope

依赖的Scope
scope定义了类包在项目的使用阶段。项目阶段包括: 编译,运行,测试和发布。

分类说明
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的依赖定义中非常重要,大家需要搞清楚他们的关系和适用范围。

原文地址:https://www.cnblogs.com/whymoney1000/p/11285783.html

时间: 2024-08-05 13:22:15

Maven的scope的相关文章

maven 中scope 的应用

maven 中scope 定义了这个包的应用范围,根据场景不同某些jar的应用也不同,scope 有5种类型: 以下内容是转帖复制: 一.compile:编译范围compile是默认的范围:如果没有提供一个范围,编译范围依赖在所有的classpath 中可用,同时它们也会被打包.而且这些dependency会传递到依赖的项目中. 二.provided:已提供范围provided 明了dependency 由JDK或者容器提供.例如如果开发了一个web 应用,可能在编译 classpath 中需要

maven之scope

最近学习maven是了解下<scope> 中文是这么解释的: compile (编译范围) compile是默认的范围:如果没有提供一个范围,那该依赖的范围就是编译范围.编译范围依赖在所有的classpath 中可用,同时它们也会被打包. provided (已提供范围) provided 依赖只有在当JDK 或者一个容器已提供该依赖之后才使用.例如, 如果你开发了一个web 应用,你可能在编译 classpath 中需要可用的Servlet API 来编译一个servlet,但是你不会想要在

Maven依赖Scope标签用法

在一个maven项目中,如果存在编译需要而发布不需要的jar包,可以用scope标签,值设为provided.如下: <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.4</version> <scope>provided</scope> </depende

Maven Dependency Scope用法

原帖地址:http://uule.iteye.com/blog/2087485 官方API描述 Dependency scope 是用来限制Dependency的作用范围的, 影响maven项目在各个生命周期时导入的package的状态. 自从2.0.9后,新增了1种,现在有了6种scope: compile默认的scope,表示 dependency 都可以在生命周期中使用.而且,这些dependencies 会传递到依赖的项目中. provided跟compile相似,但是表明了depend

【Maven】Maven之scope依赖范围

一.理解Maven scope依赖范围的作用 Maven在编译项目主代码的时候需要使用一套classspath.总共有三种classpath,分别对应于Maven编译项目主代码的时候.Maven编译和执行测试的时候.实际运行Maven项目的时候. Compile: 编泽依赖范围.如果没有指定,就会默认使用该依赖范围.使用此依赖范围的Maven依赖,对于编译.测试.运行三种classpath都有效.比如spring-core依赖,在编辑.测试.运行的时候都需要使用该依赖. test: 测试依赖范围

Maven的scope标签类别说明记录

<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> <scope>test</scope></dependency> scope定义了类包在项目的使用阶段.项目阶段包括:编译,运行,测试和发布. compile:默认

Maven依赖中的scope详解

原文链接:https://blog.csdn.net/kimylrong/article/details/50353161 原创kimy 发布于2015-12-18 17:36:48 阅读数 109197 收藏展开 Maven的一个哲学是惯例优于配置(Convention Over Configuration), Maven默认的依赖配置项中,scope的默认值是compile,项目中经常傻傻的分不清,直接默认了.今天梳理一下maven的scope. scope的分类compile默认就是com

maven学习心得

心得:这几天一直在研究maven的配置,还真是伤心啊,网上资料不多,而且问题不断.确实很让人头疼 背景:之所以学习maven是因为我们需要一键部署,我们项目是已经差不多完成了,是eclipse的web项目,需要将它变成maven项目 问题: 1.拆分项目为多个模块解决循环依赖 如果一个web项目下面有A,B,C三个模块,各个模块互相依赖,这是maven会提示,这是一个循环依赖,而不能正常编译项目. 解决办法:http://hck.iteye.com/blog/1728329 但是建议最好模块分清

maven课程 项目管理利器-maven 3-7 maven依赖范围 2星

本节主要讲了maven的依赖范围: 在pom.xml   dependency标签的scope中.eclipse中有编译的路径,maven中有编译,运行,测试的路径. 1 scope为test,为测试路径,多为junit jar包 2 scope为compile,为默认级别,编译测试运行都有效 3 scope为provided,编译和测试的时候有效 4 scope为runtime,运行和测试的时候有效  (如:jdbc驱动的实现) 5 scope为system,和compile一致,但是可移植能