文档章节

Maven百科 - 依赖管理中的scope

Garrry
 Garrry
发布于 2015/08/18 16:27
字数 1012
阅读 430
收藏 4
点赞 1
评论 0

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

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

Garrry ⋅ 2015/09/17 ⋅ 0

Maven依赖管理

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

park ⋅ 2017/11/28 ⋅ 0

Maven依赖关系中Scope的作用

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

独特amber ⋅ 2014/03/10 ⋅ 0

多模块项目的POM重构

在本专栏的上一篇文章POM重构之增还是删中,我们讨论了一些简单实用的POM重构技巧,包括重构的前提——持续集成,以及如何通过添加或者删除内容来提高POM的可读性和构建的稳定性。但在实际的...

wangrikui ⋅ 2015/09/25 ⋅ 0

Maven实战(六)依赖

我们项目中用到的jar包可以通过依赖的方式引入,构建项目的时候从Maven仓库下载即可。 1. 依赖配置 依赖可以声明如下: Xml代码 <project> ... <dependencies> <dependency> <groupId>group......

囚兔 ⋅ 2013/12/08 ⋅ 0

带你深度解析Maven

一、What`s Maven?   Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具,简单的说就是用来管理项目所...

hafiz.zhang ⋅ 2017/12/27 ⋅ 0

Dependency介绍

7.1 依赖的传递性 当项目A依赖于B,而B又依赖于C的时候,自然的A会依赖于C,这样Maven在建立项目A的时候,会自动加载对C的依赖。 依赖传递对版本的选择 假设A依赖于B和C,然后B依赖于D,D又依...

zh119893 ⋅ 2014/05/04 ⋅ 0

Maven Scope取值的含义

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

boonya ⋅ 2013/06/29 ⋅ 0

MAVEN 学习笔记

一、MAVEN是什么? maven将自己定位为一个项目管理工具。它负责管理项目开发过程中的几乎所有的东西: 版本——maven有自己的版本定义和规则 构建——maven支持许多种的应用程序类型,对于每...

lizo ⋅ 2016/12/04 ⋅ 0

分享一个Maven的架构,以及在Maven配置中的注意事项

Maven作为一个十分流行的项目管理工具,在我们的项目变得逐渐复杂的时候,可以有效的降低项目管理难度。 聚合工程就是当项目到达一定规模时,十分有效的管理子项目和模块的方法。 首先介绍一...

宇的季节 ⋅ 01/02 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

十五周二次课

十五周二次课 17.1mysql主从介绍 17.2准备工作 17.3配置主 17.4配置从 17.5测试主从同步 17.1mysql主从介绍 MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主...

河图再现 ⋅ 今天 ⋅ 0

docker安装snmp rrdtool环境

以Ubuntu16:04作为基础版本 docker pull ubuntu:16.04 启动一个容器 docker run -d -i -t --name flow_mete ubuntu:16.04 bash 进入容器 docker exec -it flow_mete bash cd ~ 安装基本软件 ......

messud4312 ⋅ 今天 ⋅ 0

OSChina 周一乱弹 —— 快别开心了,你还没有女友呢。

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享吴彤的单曲《好春光》 《好春光》- 吴彤 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :小萝莉街上乱跑,误把我认错成...

小小编辑 ⋅ 今天 ⋅ 7

mysql in action / alter table

change character set ALTER SCHEMA `employees` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci ;ALTER TABLE `employees`.`t2` CHARACTER SET = utf8mb4 , COLLAT......

qwfys ⋅ 今天 ⋅ 0

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

MySQL

查看表相关命令 - 查看表结构    desc 表名- 查看生成表的SQL    show create table 表名- 查看索引    show index from  表名 使用索引和不使用索引 由于索引是专门用于加...

stars永恒 ⋅ 昨天 ⋅ 0

easyui学习笔记

EasyUI常用控件禁用方法 combobox $("#id").combobox({ disabled: true }); ----- $("#id").combobox({ disabled: false}); validatebox $("#id").attr("readonly", true); ----- $("#id").r......

miaojiangmin ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部