发表于: 2017-09-14 23:54:34

8 588


day29

一、今天的学习内容
maven项目的目录结构:

maven项目名
----src----main----java----java项目
----test----java----测试项目
----pom.xml(maven 项目的核心)

细说pom.xml:


以上是最基本的pom文档

往文档中添加依赖:
添加Junit为例


细说依赖的范围:
就是用来控制依赖与这三种classpath(编译classpath,测试classpath,运行classpath)的关系

compile:编译依赖范围,对于编译、运行、测试三种classpath都有效

test:测试依赖范围,只对测试classpath有效。上面就是test,也就是说测试代码中的import Junit代码是没有问题的,而在主代码中使用import Junit是会造成编译错误。

provided:已提供依赖范围,对于编译测试的class path有效
runtime:运行时依赖范围。对于测试和运行的classpath

system:系统依赖范围。和provided范围完全一样,但是使用时必须通过systemPath元素显式的指定依赖文件的路径。


还有其他的依赖配置:
type:依赖的类型,对应于项目坐标定义的packaging

optional:标记依赖是否可选
excusions:用来排除出传递性依赖

传递性依赖:


在以上这种情况,如果是手工的话。一种办法是下载依赖b所有的包以及所有它依赖的包,但是这样就太不必要了。另一种方法是:只下载依赖a的包,在使用的时候,再通过出错信息,以及相关文档,加入需要的依赖,不过太麻烦了吧

这样maven就提供了传递性依赖。

传递性依赖范围


但这样就永远不会出现问题吗??
如果是下面的情况怎么办?


maven第一原则:路径近优先
第二原则:在长度相同,第一声明者有限。(在POM中依赖声明的顺序决定了谁会被解析使用。)

但是这就完美了吗??too young too naive


使用<optional>元素表示mysql-connector.java和postsql这两个依赖是可选依赖,他们只会对当前项目b产生影响,当其他项目依赖于b的时候,这两个依赖不会被传递。

但有时我们又不想传递依赖,怎么办呢?用<exclusions>元素!这叫排除依赖

人类越来越会偷懒,想想我们在java中,如果经常出现一个常量的时候,我们应该加上final关键字,如 pubic final double PI;在maven中同样,如Spring Framework来说,定义了这样一个版本之后,在升级Spring之后就只需要修改一处。很方便。


二、明天要学习的内容
务必完成maven!!!然后进攻下一本书。

三、问题
通过查本地仓库可以看到junit里的这个文件,其实就相当于pom,所以每个依赖其实都算一个maven项目,而自己的maven项目也可以install自己的本地仓库中?


文件内容


四、收获

还是得买书看啊,真的真的,,,,很系统 ,不然脑袋里的东西永远成不了体系,我可能有强迫症,,,



返回列表 返回列表
评论

    分享到