Java项目架构基础-Maven概述(下)

七、Maven聚合

1、为什么要聚合

       随着技术的飞速发展和各类用户对软件的要求越来越高,软件本身也变得越来越复杂,然后软件设计人员开始采用各种方式进行开发,于是就有了我们的分层架构、分模块开发,来提高代码的清晰和重用。针对于这一特性,maven也给予了相应的配置。

情景分析:

       我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可以独立的编译和测试运行每个模块,但是随着项目的不断变大和复杂化,我们期望能够使用简单的操作来完成编译等工作,这时Maven给出了聚合的配置方式。

       所谓聚合,顾名思义,就是把多个模块或项目聚合到一起,我们可以建立一个专门负责聚合工作的Maven project

2、建立该project的时候,我们要注意以下几点

(1)本身也做为一个Maven项目,它必须有自己的POM

(2)它的打包方式必须为: pom

(3)引入了新的元素:modules---module

(4)版本:聚合模块的版本和被聚合模块版本一致

(5)relative path:每个module的值都是一个当前POM的相对目录

(6)聚合模块减少的内容:聚合模块的内容仅仅是一个pom.xml文件,它不包含src/main/java、src/test/java等目录,因为它只是用来帮助其它模块构建的工具,本身并没有实质的内容。

八、Maven的继承

1、为什么要继承

      做面向对象编程的人都会觉得这是一个没意义的问题,是的,继承就是避免重复,maven的继承也是这样,它还有一个好处就是让项目更加安全。

情景分析:

        我们在项目开发的过程中,可能多个模块独立开发,但是多个模块可能依赖相同的元素,比如说每个模块都需要Junit,使用spring的时候,其核心jar也必须都被引入,在编译的时候,maven-compiler-plugin插件也要被引入

2、继承的时候需要注意

(1)说到继承肯定是一个父子结构,创建一个parent project

(2)<packaging>: 作为父模块的POM,其打包类型也必须为POM

(3)结构:父模块只是为了帮助我们消除重复,所以它也不需要src/main/java、src/test/java等目录

(4)新的元素:<parent> , 它是被用在子模块中的

(5)<parent>元素的属性:<relativePath>: 表示父模块POM的相对路径,在构建的时候,Maven会先根据relativePath检查父POM,如果找不到,再从本地仓库查找

6.relativePath的默认值: ../pom.xml

7.子模块省略groupId和version: 使用了继承的子模块中可以不声明groupId和version, 子模块将隐式的继承父模块的这两个元素

九、Maven私服-Nexus

1、nexus是什么?

        Nexus 是Maven仓库管理器,如果使用Maven,可以从Maven中央仓库 下载所需要的构件(artifact),但这通常不是一个好的做法,你应该在本地架设一个Maven仓库服务器,在代理远程仓库的同时维护本地仓库,以节省带宽和时间,Nexus就可以满足这样的需要。此外,他还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,它占用较少的内存,基于简单文件系统而非数据库。这些优点使其日趋成为最流行的Maven仓库管理器。

2、Nexus的内置仓库

 hosted 类型的仓库,内部项目的发布仓库

  proxy类型的仓库,从远程中央仓库中寻找数据的仓库

(1)Maven Central:该仓库代理Maven中央仓库,其策略为Release,因此只会下载和缓存中央仓库中的发布版本构件。

(2)Releases:这是一种策略为Release的宿主类型仓库,用来部署组织内部的发布版本构件。

(3)Snapshots:这是一个策略为Snapshot的宿主类型仓库,用来部署组织内部的快照版本构件。

(4)3rd party:这是一个策略为Release的宿主类型仓库,用来部署无法从公共仓库获得的第三方发布版本构件。

(5)Public Repositories:该仓库组将上述所有策略为Release的仓库聚合并通过一致的地址提供服务。 国内镜像地址:         http://maven.oschina.net/content/groups/public/

(6)Mirror镜像 mirror相当于一个拦截器,它会拦截maven对remote repository的相关请求,把请求里的remote repository地址,重定向到mirror里配置的地址。

(7)阿里镜像配置

<mirror>

      <id>nexus-aliyun</id>

      <mirrorOf>*</mirrorOf>

      <name>Nexus aliyun</name>

      <url>http://maven.aliyun.com/nexus/content/groups/public</url>

</mirror>

发布了14 篇原创文章 · 获赞 6 · 访问量 3056

猜你喜欢

转载自blog.csdn.net/tangyin_007/article/details/86712006