《maven实战》读书笔记

maven在实习之前没有用到过,实习期间用的比较多,感觉的确很不错。但是没有系统了解过maven,用起来总感觉不是特别顺手,于是买了《maven实战》,对maven比较陌生但是感兴趣的同学也可以参考这本书。

这本书可能是看的第一本工具书,过程是边看边实践,顺便把一些之前疑问的点给勾了出来,在这里记录一下。


第一章 maven简介

maven主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。
maven是跨平台的,在windows/linux/mac上都可以使用相同的命令。


第五章 坐标和依赖

坐标

maven的构件用坐标来唯一标识。
坐标通过groupId,artifactId,version,packaging,classifier定义。

groupId定义当前maven项目隶属的实际项目,如com.mycompany.projectA
artifactId定义实际项目中的一个maven项目,推荐用实际项目名称作为artifactId的前缀,如projectA-service
version定义maven项目当前所处的版本

前三个元素是必须定义的。

packaging定义项目打包的方式,默认jar, 这个元素是可选的。
classifier用来帮助定义构件输出的一些附属构件。附属构件与主构件对应,如某个主构件为XXX.jar,该项目可能还会通过一些插件生成XXX-javadoc.jar,XXX-sources.jar。

依赖

每个依赖可以包含的元素:
groupId,artifactId,version:依赖的基本坐标
type:依赖的类型,对应于项目坐标定义的packaging,默认为jar
scope:依赖的范围
optional:标记依赖是否可选(一般不用)
exclusions:排除传递性依赖

依赖范围:
maven在编译项目主代码时需要使用一套classpath,在编译和执行测试的时候会使用另外一套classpath,实际运行maven项目的时候,又会使用一套classpath。
依赖范围就是用来控制依赖与这三种classpath的关系。
compile:对编译、测试、运行都有效
test:只对于测试classpath有效
provided:对于测试和编译有效,运行时无效。 
runtime:在测试和运行时有效,编译时无效。
system:应该谨慎使用。与provided范围一致,但是必须通过systempath元素显示指定,与本机相连。


maven依赖调解
比如会出现: A->B->X, A->C->X
第一原则:路径最优者优先
第二原则:在依赖路径长度相等的前提下,第一声明者优先

可以使用mvn dependency:analyze来分析依赖

第六章 仓库

maven可以在某个位置统一存储所有maven项目共享的构件,这个统一点位置就是仓库。
根据坐标寻找构件时,先找本地仓库,没有的话去远程仓库查找,找到后下载到本地再使用。
每个用户只有一个本地仓库,但可以配置多个远程仓库。


第八章 聚合与继承

在现有的实际项目中,往往一个pom既是聚合pom,又是父pom,这么做主要是为了方便。

maven提倡约定优于配置。

你可能感兴趣的:(maven,代码,管理)