文档章节

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
粉丝 22
博文 46
码字总数 48703
作品 0
浦东
技术主管
私信 提问
Maven百科 - 项目构建中的聚合与继承

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

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

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

park
2017/11/28
0
0
《Maven官方文档》-Maven依赖机制简介

《Maven官方文档》-Maven依赖机制简介 原文地址 译者:Tyrian 依赖机制是Maven最为用户熟知的特性之一,同时也是Maven所擅长的领域之一。单个项目的依赖管理并不难, 但是当你面对包含数百个...

tantexian
2018/12/13
0
0
Maven依赖中scope的含义

Maven依赖中scope的含义 整理一下Maven中Scope的详细作用,都是抄的别人内容整理了一下。参考: https://blog.csdn.net/claram/article/details/77646263 https://blog.csdn.net/kimylrong/...

UEUEO
2018/11/26
0
0
Maven 中 dependencies 与 dependencyManagement 的区别

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

晨猫
2018/10/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

详解webpack-dev-server的简单使用

webpack-dev-server是一个小型的Node.js Express服务器,它使用webpack-dev-middleware来服务于webpack的包,除此自外,它还有一个通过Sock.js来连接到服务器的微型运行时. 我们来看一下下面的...

前端攻城老湿
22分钟前
0
0
深度解析JavaScript事件对象

这篇文章主要介绍了JavaScript事件对象,结合实例形式深入分析了javascript DOM、IE及其他浏览器相关事件对象操作技巧与注意事项,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可...

前端攻城小牛
24分钟前
0
0
Android下拉刷新开源框架

添加依赖 //下拉刷新 implementation 'com.jcodecraeer:xrecyclerview:1.5.9' xml引用 <com.jcodecraeer.xrecyclerview.XRecyclerView android:id="@+id/act_xrecycler......

lanyu96
30分钟前
0
0
Linux内核中ioremap映射的透彻理解

几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两...

天王盖地虎626
34分钟前
1
0
Collection中的之retainAll()方法的理解

//在jdkapi中的方法,说明返回值为boolean类型, boolean retainAll(Collection<?> c) ; //api中给的注释 //Retains only the elements in this list that are contained in the specified......

南桥北木
37分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部