读书人

《Maven 实战》读书笔记(3) 坐标和依

发布时间: 2012-08-29 08:40:14 作者: rapoo

《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工具可以帮助分析当前项目的依赖,但是该工具只会分析编译主代码和测试代码所需要用到的依赖,一些执行测试和运行时需要的依赖它就发现不了。

读书人网 >编程

热点推荐