项目管理利器—maven(二)

来源:互联网 发布:java包装一年工作经验 编辑:程序博客网 时间:2024/06/05 08:48

一.maven的生命周期和插件

完整的项目构件过程包括:
清理,编译,测试,打包,集成测试,验证,部署

maven生命周期包括:

clean 清理项目:

 pre-clean  执行清理前的工作 clean 清理上一次构建生成的所有文件 post-clean执行清理后的文件

default 构件项目(最核心)

 compile test package install等

site 生成项目站点

 pre-site  在生成项目站点前要完成的工作 site   生成项目的站点文档 post-site   在生成项目站点后要完成的工作 site-deploy  发布生成的站点到服务器上

二.maven中的Pom.xml解析

pom.xml常用元素介绍

pom是maven项目的核心管理文件,用于项目描述,组织管理,依赖管理,构建信息管理

<modelVersion>4.0.0</modelVersion> <groupId>反写的公司网址+项目名</groupId> <artifactId>项目名+模块名</artifactId> <!--   第一个0 表示大版本号   第二个0 表示分支版本号   第三个0 表示小版本号   snapshot快照   alpha 内部测试   beta  公测   Release 稳定   GA正式发布 --> <version>0.0.1snapshot</version> <!-- 默认是jar war zip pom --> <packaging></packageing><!--项目描述名 --><name></name><!--项目地址 --><url></url><!--项目描述--><description></description><!--开发人员信息--><developers></developers><!--许可证信息--><licenses></licenses><!--组织信息--><organization></organization><!--依赖项--><dependencies>   <dependency>      <groupId>反写的公司网址+项目名</groupId>      <artifactId>项目名+模块名</artifactId>      <version>0.0.1snapshot</version>      <type></type>      <scope>test<scope>      <!-- 设置依赖是否可选 -->      <optional></optional>      <!-- 排除依赖传递列表 -->      <exclusions>         <exclusion>         </exclusion>      </exclusions>   </dependency></dependencies><!-- 依赖的管理 --><dependencyManagement>   <dependencies>     <dependency></dependency>   </dependencies></dependencyManagement><build>  <!-- 插件列表 -->  <plugins>     <plugin>       <groupId>反写的公司网址+项目名</groupId>       <artifactId>项目名+模块名</artifactId>       <version>0.0.1snapshot</version>     </plugin>  </plugins></build> <!-- --><parent></parent><!-- --><modules>   <module></module></modules>

三.maven依赖范围

<scope>test</scope>

三种classpath:
1.编译2.测试3.运行

6中scope值包括:
compile 默认的范围,编译测试运行都有效
provided 在编译和测试时有效
runtime 在测试和运行时有效
test 只在测试时有效
system 与本机系统相关联,可移植性差
import 导入的范围,它只使用在dependencyManagement中,表示从其他的pom中导入dependecy的配置

四.maven依赖传递

山鸡跟南哥混,南哥跟B哥混,B哥跟山鸡产生间接的依赖关系

新建三个maven项目

这里写图片描述

在nage的pom.wml文件中,加入bge的坐标
这里写图片描述

这里写图片描述

项目运行,发现报错,提示找不到bge的架包,因为本地仓库中并没有。所以要先将bge进行打包。

这里写图片描述

然后安装到本地仓库中

这里写图片描述

然后再运行一下nage

这里写图片描述

这样呢,nage就构建成功了。

然后我们看一下shanji,我们让shanji依赖于nage

这里写图片描述

然后对nage进行打包,再运行shanji,发现构建成功了。

然后shanji只想听nage的,不想听bge的,那么就需要移除bge的依赖。

这里写图片描述
那么系统就自动的将bge的依赖移除了。

项目中的JRE默认的是1.5的,我们可以修改成1.7的
这里写图片描述

一劳永逸的方法,修改settings文件

这里写图片描述

五.maven依赖冲突

1.短路优先
A->B->C->X(jar)
A->D->X(jar)优先

打开链接,Commons IO
我们为bge复制一个2.4的版本

<!-- https://mvnrepository.com/artifact/commons-io/commons-io --><dependency>    <groupId>commons-io</groupId>    <artifactId>commons-io</artifactId>    <version>2.4</version></dependency>

这里写图片描述

然后为nage复制一个2.0的版本

<!-- https://mvnrepository.com/artifact/commons-io/commons-io --><dependency>    <groupId>commons-io</groupId>    <artifactId>commons-io</artifactId>    <version>2.0</version></dependency>

这里写图片描述

这里写图片描述

我们可以看到Commons IO这个架包已经自动下载下来了

这里写图片描述

那么shanji的架包离nage最近,所以也是2.0版本的,这就叫做短路优先。

2.先声明先优先
如果路径长度相同,则谁先声明,先解析谁

例子:
首先将nage中对bge的依赖删除掉,我们让shanji同时依赖bge和nage,并将bge的依赖放在nage的前面。

这里写图片描述

我们可以看到commons-io的版本变更为了2.4的版本。如果把nage放在bge的前面,那么commons-io版本就是2.0.

六.maven聚合和继承

在maven中,将多个项目进行install到本地仓库中,必须对其依次执行,maven中有种方式可以将其一起执行,这种方式称为聚合。

我们将bge,nage,shanji进行聚合。

创建新的项目hongxing.aggreation

这里写图片描述

这里写图片描述

这里写图片描述

继承:

我们再新建一个maven项目:

这里写图片描述

修改pom.xml文件,删除/src/main/java和/src/test/java两个文件,然后更新一下。
这里写图片描述

然后修改bge的pom.xml文件,让其继承自parent

这里写图片描述

原创粉丝点击