博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
项目管理工具Maven5
阅读量:5756 次
发布时间:2019-06-18

本文共 3293 字,大约阅读时间需要 10 分钟。

七、依赖管理(一)依赖范围

依赖范围是用来控制依赖与3种classpath(编译classpath,测试classpath,运行classpath)的关系。maven有以下几种依赖范围:
项目管理工具Maven5
1、compile 编译、测试、运行,A在编译时依赖B,并且在测试和运行时也依赖。
strus-core、spring-beans
打到war包或jar包。
2、provided 编译、和测试有效,A在编译和测试时需要B。
比如:servlet-api就是编译和测试有用,在运行时不用(tomcat容器已提供)。
不会打到war。
3、runtime:测试、运行有效。
比如:jdbc驱动包 ,在开发代码中针对java的jdbc接口开发,编译不用。
在运行和测试时需要通过jdbc驱动包(mysql驱动)连接数据库,需要的!!
会打到war。
4、test:只是测试有效,只在单元测试类中用。
比如:junit
不会打到war。
如何设置依赖范围呢?
比如我们要将mysql驱动的依赖设置为runtime范围,配置如下:

mysql
mysql-connector-java
5.1.6
runtime

将servlet依赖设置为provided

[/align]
javax.servlet
servlet-api
2.5
provided

如果是compile就不需要设置了,因为compile是scope的默认值。关于test范围我们在后边讲解单元测试时再做演示。

重新执行打包为war , 会发现servlet-api.jar已经不存在。
(二)依赖传递
什么是依赖传递?
A->B(compile) 第一关系: a依赖b compile
B->C(compile) 第二关系: b依赖c compile
我们看下图:
项目管理工具Maven5
1、纵坐标:直接依赖
A依赖B,B是A的直接依赖。
在A的pom.xml中添加B的坐标。
2、横坐标:传递依赖
B依赖C,C是A的传递依赖。
3、中间部分:传递依赖的范围,A依赖C的范围。
项目管理工具Maven5
(三)依赖调节原则(了解)
情景再现:
项目A依赖于项目B,项目B依赖于项目C(v1), 项目A依赖于项目D,项目D依赖于项目E,项目E依赖于C(v2),
1、A--->B---->C(v1) ,
2、A------>D---->E----->C(v2)
项目A隐形依赖了两个版本的C,那到底采用哪个版本呢?
分析:
依赖调解第一原则:路径优先,很明显,第一种路径深度是3,第二种路径深度是4,所以,maven会采用C(v1)
依赖调解第二原则:声明优先,假设路径深度相等,那么声明在前的会被引用。
(四)版本锁定
在Maven中dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器。
pom.xml文件中,jar的版本判断的两种途径
1.如果dependencies里的dependency自己没有声明version元素,那么maven就会倒dependencyManagement里面去找有没有对该artifactId和groupId进行过版本声明,如果有,就继承它,如果没有就会报错,告诉你必须为dependency声明一个version。
2.如果dependencies中的dependency声明了version,那么无论dependencyManagement中有无对该jar的version声明,都以dependency里的version为准。
(五)排除依赖
我们仔细观察Maven Dependencies 下的jar包,会发现存在了两个javassist包,一个是 javassist-3.18.1-GA. ,另一个是javassist-3.11.0-GA 。这是因为我们引入三大框架的jar包,hibernate依赖javassist-3.18.1-GA ,而struts 依赖javassist-3.11.0-GA 。这就是我们通常所说的jar包版本冲突,如果这两个jar包同时存在,会导致后续某些操作会存在问题(比如openSessionInView失效),所以需要排除低版本的jar包。
如何来排除依赖呢?添加下面红色字体的部分。作用是排除struts中依赖的javassist的jar

[/align]
org.apache.struts
struts2-core
2.3.24
javassist
javassist

添加后发现javassist-3.11.0-GA消失。

八、单元测试
向erp_dao工程添加junit

[/align]
junit
junit
4.9
test

在erp_dao工程src/test/java 下创建测试类

package erp_dao;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4Cla***unner;import cn.itcast.mavenweb.dao.DepDao;@RunWith(SpringJUnit4Cla***unner.class)@ContextConfiguration(locations={"classpath:applicationContext_dao.xml","classpath:applicationContext_datasource.xml"})public class TestDepDao {@Autowiredprivate DepDao depDao;@Testpublic void testList(){System.out.println("test!!");System.out.println(depDao.getList().size());}}

右键点击你要测试的方法

项目管理工具Maven5
选择右键菜单 Run as --> JUnit test
如果是绿色的显示表示通过测试
项目管理工具Maven5
如果是红色的显示表示未通过测试
项目管理工具Maven5
如果有测试类未通过,直接打包,会出现以下提示
项目管理工具Maven5
表示该工程没有成功,因为测试未通过。也就是说打包操作是要求在所有的测试用例都通过的基础上才进行。
另外,通过我们观察,发现测试类和JUnit 并不会打包到war包中

转载于:https://blog.51cto.com/13587708/2121081

你可能感兴趣的文章
Tomcat http跳转https
查看>>
一个自动布署.net网站的bat批处理实例
查看>>
tomcat 安装
查看>>
AIX:物理卷及有关概念
查看>>
我的友情链接
查看>>
Centos6.6安装选包及基础场景说明
查看>>
java基础面试题-1
查看>>
深克隆与序列化效率的比较
查看>>
lamp+nginx代理+discuz+wordpress+phpmyadmin搭建一
查看>>
nagios监控使用139邮箱报警
查看>>
Windows Phone 7 中各种Task解说(启动器与选择器)
查看>>
罗森伯格助力2011年中国智能建筑技术发展应用论坛哈尔滨站
查看>>
网络割接
查看>>
windows server 2016 活动目录(二)
查看>>
openstack G版 修改vm的flavor级别
查看>>
python_控制台输出带颜色的文字方法
查看>>
java泛型中特殊符号的含义
查看>>
一秒 解决 ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql 问题
查看>>
Android组件化最佳实践 ARetrofit原理
查看>>
舍弃浮躁, 50条重要的C++学习建议
查看>>