文档章节

Maven百科 - 依赖管理中的scope

Garrry
 Garrry
发布于 2015/08/18 16:27
字数 1012
阅读 432
收藏 4

在Maven的依赖管理中.

目前有6种类型的scope他们分别是,compile,provided, test,runtime,system,import

 

在详细介绍他们之前,首要要理解一下,maven世界中的3种classpath和2种source(resources)

 

1. source与resources

 我们都知道在maven的规范中,

 要求我们使用2个source 目录分别存放项目源代码和测试源代码。

 要求我们使用2个resource 目录分别存放项目源(配置)文件和测试(配置)文件。

 

|---src
    |---main
         |---java
         |---resources
    |---test
         |----java
         |----resources 

 

     当然了,不按照maven规定的默认路劲来摆放,也可以按照你自己一套来摆放。但是不是很建议这么做, 因为Maven默认的这2个路劲可以适用绝大多数的项目了,除非说你做构建的程序的目录层级结构很怪异,或者说 maven的这一套已经不适用了,那么可以自己定义了。但是不管你怎么定义,在maven的世界里面 就这2种类型的源代码路劲,比如说我可以这么定义:

   

 /main/ejb/                   ---> 放源代码

    /main/jee/                   ---> 放源代码

    /main/mobile              ---> 放源代码

    /test/ejb/                    ---> 放测试代码

    /test/jee                       ---> 放测试代码

    /test/mobile/                ---> 放测试代码

 

   所谓配置文件,无非就是框架和规范要求使用的一些文件,比如说 log4j,hibernate jpa spring等的配置文件。当然了,和source 类似,你也可以不按照maven默认的路径来摆放。但是 也不是很建议这么做,理由同source

    要注意的是,如果说你在源代码写了一段主函数 运行起来并且是需要加载这些配置文件的,那么这段程序是会在源代码目录里面和源配置文件目录里面去需找所需要的这些配置文件。除非说 你在加载这些文件的时候使用的是系统绝对路劲, 那么你就可以完全忽略maven的规定了。也有一些框架 就是这么规定说,把log4j.properties放到哪里哪里,这个时候 就按部就班吧,该放哪放哪了。

2. Classpath

 

 

2.1 Test classpath

    这个classpath 表示的是 在编译测试代码的时候使用的一个classpath,在编译测试源代码的时候,或者说 在执行单元测试(junit)的时候或者说执行测试源代码主函数的时候,会加载这个 test classpath,所以说,单元测试所需要加载的jar包之类的是需要放进这个classpath里面的

 

2.2 Compile Classpath

   这个classpath 表示的是 在编译源代码的时候使用一个classpath, 在编译源代码的时候或者说执行源代码主函数的时候,会加载这个 compile classpath,所以说,源代码所需要加载的jar包之类的是需要放进这个classpath里面的,比如说你使用了hibernate这个框架来做数据存储,那么你需要把hiernate需要的一些包放到这个classpath中

 

2.3 Runtime Classpath/Container Classpath

package classpath 或者container classpath

   这个classpath 表示的是 在打包的时候会这些classpath里面的jar包一同放到你所打的包里面了,比如说你打的包里面用到了spring,而且呢你部署的那个服务器上面的类库也没有spring,那么就需要把spring放到package的classpath

 

言归正传了,在maven依赖管理中,定义的scope其实就是告知maven 这个依赖是使用到哪个classpath中。

其中 compile 是maven默认的一个scope。

其中需要注意的是provide和system虽然范围一样,但是 system表示的使用本地非仓库的依赖包,需要额外定义一个systemPath的属性,告知jar包的路劲

 

  Test Classpath Compile   Classpath Package   Classpath
compile Y Y Y
provided Y Y  
test Y    
runtime Y   Y
system Y Y  

 

3 关于 import

    这是个用于maven 继承机制的的一个特殊的scope。 

© 著作权归作者所有

共有 人打赏支持
Garrry
粉丝 23
博文 46
码字总数 48703
作品 0
浦东
技术主管
私信 提问
Maven百科 - 项目构建中的聚合与继承

摘要 继承和聚合看似都是在主要的POM文件中做一下相应的配置,在实际操作过程中往往只是知其然不知其所以然,不知道的可能很容易混淆。 1 继承 继承就是在从主pom那里继承许多重用的配置,可...

Garrry
2015/09/17
69
0
Maven依赖管理

其中一个Maven的核心特征是依赖管理。管理依赖关系变得困难的任务一旦我们处理多模块项目(包含数百个模块/子项目)。 Maven提供了一个高程度的控制来管理这样的场景。 传递依赖发现 这是很通...

park
2017/11/28
0
0
Maven 中 dependencies 与 dependencyManagement 的区别

Maven 中 dependencies 与 dependencyManagement 的区别 前提 这段时间项目中遇到过了一些 Jar 包冲突的问题,很多是由于我们项目模块很多的时候,用 Maven 管理不当导致的冲突问题,本文就这...

晨猫
10/31
0
0
Maven依赖关系中Scope的作用

maven依赖关系中Scope的作用 Dependency Scope 在POM 4中,中还引入了,它主要管理依赖的部署。目前可以使用5个值: compile,缺省值,适用于所有阶段,会随着项目一起发布。 provided,类似...

独特amber
2014/03/10
0
0
【Spring Boot 系列 依赖管理】

1、简介 为完成不同需求的Spring应用构建,SpringBoot提供了多种不同的依赖管理模板,每种模板均为一系列已完成的依赖的管理.例如如需要构建web项目,我们只需添加spring-boot-starter-web的依赖...

HansonReal
2017/11/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

验证码

response生成验证码 验证码的作用:防止恶意注册、攻击等 网站上看到的验证码,实际上都是一些图片,而这些图片都是程序(Servlet)生成的! package day19.test; import java.awt.Color; i...

码农屌丝
41分钟前
0
0
day147-2018-11-14-英语流利阅读-待学习

《毒液》刚刚上映,创造漫威宇宙的人却走了 雪梨 2018-11-14 1.今日导读 中国的金庸创造了侠义英雄和江湖传奇,而大洋彼岸的斯坦·李也同样创造了一个绚烂璀璨的漫威宇宙,他构思的每个超级英...

飞鱼说编程
42分钟前
3
0
CentOS 安装PHP5和PHP7

安装PHP5 下载解压二进制包 [root@test-a src]# cd /usr/local/src/[root@test-a src]# wget http://cn2.php.net/distributions/php-5.6.32.tar.bz2[root@test-a src]# tar jxvf php-5.6......

野雪球
今天
4
0
修改jfinal默认的redis序列化方式

jfinal 越来越流行, jfinal的redis插件默认的序列化方式是fst。 但是系统中其他项目中用的是spring data redis中的StringRedisTemplate,所有的value都是通过gson转化成String放进去的。 直接...

采蘑菇的大叔
今天
1
2
windows上类似dnsmasq的软件Dual DHCP DNS Server

官网地址:http://dhcp-dns-server.sourceforge.net/官网定向的下载地址:https://sourceforge.net/projects/dhcp-dns-server/files/ 设置参考地址:http://blog.51cto.com/zhukeqiang/18264......

xueyuse0012
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部