这两天老大打算用maven做项目管理,如是在baidu中狂找资料,最后在csdn找到了maven实战完全版。学习中。。。。。。
坐标和依赖
坐标:在pon.xml 中 无论是项目本身还是需要依赖的构建或者是maven的插件在maven仓库中都包含一个唯一的坐标值。
坐标的组合是:
<groupId>项目的名称</groupId>
<artifactId>模块名称</artifactId>
<version>版本信息</version>
<packaging>文件扩充名</packaging> 默认的是jar
例如:
struts2 核心包 core 的坐标
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.14</version>
依赖: 项目依赖jar包,maven依赖插件。
在用maven做项目管理时主要存在这两种依赖,主要体现在两个pom.xml里面的
1.<dependencies>jar包依赖声明</dependencies>
2.<plugins>插件依赖声明</plugins>
依赖的属性设置:
<groupId>项目的名称</groupId>
<artifactId>模块名称</artifactId>
<version>版本信息</version>
<type>对应坐标定义的packaging</type>
<scope>依赖范围分四个区域(compile[编译(spring-core)],test[测试(jUnit)],provided[已提供(servlet-api)],runtime[运行时(jdbc 驱动)])</scope>
四个区域在正式发布时 测试依赖是不会与项目打包的
<optional>标记依赖可选</optional>用于依赖范围都是compile 但是可选依赖的如:mysql JDBC 驱动 和 其他数据库驱动
<exclusions>排除依赖</exclusions>
传递性依赖:
在pom.xml 中声明依赖 struts2-core 在本地的库里面可以看到maevn从中央参考里同时下载了comming-log 等strust2所依赖的包,这就是传递行依赖。
依赖范围对传递性依赖同时有效。
在项目中 如果 A 项目 -> B 项目 -> C项目 A项目 -> C项目
依赖调解:
如果 项目A --> 项目B --> 项目C 同时 项目A --> 项目E -->项目C 则下载的顺序是按照pom.xml 声明的顺序依赖
如果 项目A ---> 项目B --->项目C 同时 项目A ---> 项目C 则执行 第二种情况的依赖
路径长度相同时已声明顺序为优,不同时以最短路径为优。
排除依赖:
如果 项目A -->项目B -->项目C中某个不稳定模块。
这时候我们可以在依赖加上:
<exclusions>
<groupId>项目的名称</groupId>
<artifactId>模块名称</artifactId>
</exclusions>
并在pom.xml 中申明改模块的稳定版本。
归类依赖:
书中以spring-core 的包引入威力:在properties 中声明 spring-version 在依赖申明中<version> 中引入值在升级的时候只有修改一个地方。
优化依赖:
命令(记得是在项目的目录下面):
mvn dependency:list 查询所以依赖
mvn dependency:tree 查询依赖树
mvn dependency:analyze (注意两个显示内容)
1.used undeclared dependencies 没有显示声明的依赖
2.unused deckared dependencies 项目未使用的依赖
这些完全是个人的一些总结建议大家还是去看maven实战优快云中有完整版本的下载