《Maven 实战》读书笔记(三) 坐标和依赖
第五章:坐标和依赖
1.JAVA构件,MAVEN就必须将它们唯一标识,这就是依赖管理的底层基础--坐标。
2.maven定义了这样一组规则:世界上任何一个构件都可以使用maven坐标唯一标识,maven坐标的元素包括groupId,artifactId,version,packaging,classifier.
3.maven坐标是通过一些元素定义的,它们是groupId,artifactId,version,packaging,classifier.这5个元素中只packaging是可选的(默认为jar),而classifier是不能直接定义的。
(1).groupId,定义当前maven项目隶属的实际项目。
(2).artifactId,定义实际项目中的一个maven项目(模块),推荐的做法是使用实际的项目名称作为artifactId的前缀。
(3).version,定义maven当前所处的版本。
(4).packaging,定义maven项目的打包方式。
(5).classifier,该元素用来帮助定义构建输出的一些附属构件。
4.项目构件的文件名是与坐标是相对应的,一般规则为"artifactId-version[-classifier].packaging",[-calssifier]表示可选。
5.scope是用来定义依赖范围。
6.依赖的配置
<project> <modelVerion>4.0</modelVersion> <groupId>com.juvenxu.mvnbook</groupId> <artifactId>project-a</artifactId> <version>1.0.0</version> <dependencies> <dependency> <groupId>com.juvenxu.mvnbook</groupId> <artifactId>project-b</artifactId> <version>1.0.0</version> <exclusions> <exclusion> <groupId>com.juvencu.mvnbook</groupId> <artifactId>project-c</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.juvencu.mvnbook</groupId> <artifactId>project-c</artifactId> <version>1.1.0</version> </dependency> </dependencies></project>
代码中,项目A依赖于项目B,但是由于一些原因,不想引入传递性依赖C,而是自己显示地声明对于项目C1.1.0版本的依赖。代码中使用exclusions元素声明排除依赖,exclusions可以包含一个或者多个exclusion子元素。
需要注意的是,声明exclusion的时候只需要groupId,artifactId就能唯一定义某个依赖。
12.归类依赖。通过<properties>元素来定义。
13.优化依赖:maven会自动解析所有项目的直接依赖和传递性依赖,并且根据规则正确判断每个依赖的范围。对于一些依赖冲突,也能进行调节,以确保任何一个构件只有唯一的版本在依赖中存在。在这些工作之后,最后得到的那些依赖被称为解析依赖。运行下面两条命令分别可以查看当前项目的已解析依赖。
mvn dependency:list
mvn dependency:tree
使用mvn dependency:list和mvn dependency:tree可以帮助我们详细了解项目中所有依赖的具体信息。在此基础上,还有dependency:analyze工具可以帮助分析当前项目的依赖,但是该工具只会分析编译主代码和测试代码所需要用到的依赖,一些执行测试和运行时需要的依赖它就发现不了。