SSH深度历险(四) Maven初步学�

SSH深度历险(四) Maven初步学�

        这几天接触这个词,非常多遍了,仅仅是浅显的体会到它在GXPT中的优点,功能之强大,又通过网络查询了资料进一步的认识学习了,和大家分享。


        Maven是基于项目对象模型(POM),能够通过一小段描写叙述信息来管理项目的构建,报告和文档的软件项目管理工具


在gxpt中的体现


1. 父子关系

      一个多模块项目通过一个父POM 引用一个或多个子模块来定义。
      a. 在父文件夹中分别创建子项目
      b. 父项目,通过下面配置,将子项目关联:
例如以下:

<span style="font-size:18px;"><span style="font-size:18px;"><modules>

		<module>../gxpt_entity_uas</module> 
		<module>../gxpt_common_tool</module> 
		<module>../gxpt_common_eao_impl</module> 
		<module>../gxpt_mgr_uas_fee</module> 
		<module>../gxpt_mgr_uas_fee_impl</module> 
		<module>../gxpt_web_uas_fee</module> 
		<module>../gxpt_common_eao</module> 
	</modules></span></span>
<span style="font-size:18px;"><span style="font-size:18px;"><packaging>pom</packaging></span></span>


        当中:在modules元素中,每一个modules 元素相应了一个 父文件夹下的子文件夹。Maven会去这些子文件夹中寻找pom.xml 文件,而且在构建mydemo时会将这些子模块包括到要构建的项目中。

       
        另外,通过配置<packaging>pom</packaging> 表示这个父项目不像之前的项目那样创建一个JAR 或者一个WAR,它不过一个引用其他Maven 项目的POM。pom.xml 中下一部分列出了项目的子模块。


c. 在子项目的POM中加入�父项目关联:

<span style="font-size:18px;"><span style="font-size:18px;"><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.tgb</groupId>
		<artifactId>gxpt</artifactId>
		<version>0.0.1-SNAPSHOT</version>
		<relativePath>../gxpt/pom.xml</relativePath>
	</parent></span></span>


2. 依赖关系

      假设项目间存在依赖关系,如项目A依赖项目B,则须要在项目A的pom添加�了对B的依赖节点<dependency>,表示A项目中须要B的jar包。

Maven十分完好的生命周期模型(lifecycle)

        Maven强大的一个重要的原因是它有一个十分完好的生命周期模型(lifecycle),这个生命周期能够从双方面来理解,第一,顾名思义,执行Maven的每一个步骤都由它来定义的,这样的提前定义的默认行为使得我们使用Maven变得简单,相比而言,Ant的每一个步骤都要你手工去定义。第二,这个模型是一种标准,在不同的项目中,使用Maven的接口是一样的,这样就不用去细致理解每一个项目的构建了,普通情况下,mvn clean install 这种命令是通用的。我想,一定是吸收了很多项目的经验,Maven才干定义出如此完好的模型。

 

        Maven有三套相互独立的生命周期,请注意这里说的是“三套”,并且“相互独立”,刚開始学习的人easy将Maven的生命周期看成一个总体,事实上不然。这三套生命周期各自是:

  • Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
  • Default Lifecycle 构建的核心部分,编译,測试,打包,部署等等。
  • Site Lifecycle 生成项目报告,网站,公布网站。

 

        知道了每套生命周期的大概用途和相互关系以后,来逐个具体看一下每套生命周期,Clean和Site相对照较简单,先解释一下。

 

         每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会相应于一个特定的阶段。比方,执行mvn clean,这个的clean是Clean生命周期的一个阶段。有点绕?要知道有Clean生命周期,也有clean阶段。


Clean生命周期一共包括了三个阶段:

  • pre-clean  运行一些须要在clean之前完毕的工作
  • clean  移除全部上一次构建生成的文件
  • post-clean  运行一些须要在clean之后立马完毕的工作

        mvn clean中的clean就是上面的clean,在一个生命周期中,执行某个阶段的时候,它之前的全部阶段都会被执行,也就是说,mvn clean 等同于mvn pre-clean clean,假设我们执行mvn post-clean,那么 pre-clean,clean 都会被执行。这是Maven非常重要的一个规则,能够大大简化命令行的输入。

 

以下看一下Site生命周期的各个阶段:

  • pre-site     运行一些须要在生成网站文档之前完毕的工作
  • site    生成项目的网站文档
  • post-site     运行一些须要在生成网站文档之后完毕的工作,而且为部署做准备
  • site-deploy     将生成的网站文档部署到特定的server上

       这里经经常使用到的是site阶段和site-deploy阶段,用以生成和公布Maven网站,这但是Maven相当强大的功能,Manager比較喜欢,文档及统计数据自己主动生成,非常好看。

 

       最后,来看一下Maven的最重要的Default生命周期,绝大部分工作都发生在这个生命周期中,这里,我仅仅解释一些比較重要和经常使用的阶段:


  • validate
  • generate-sources
  • process-sources
  • generate-resources
  • process-resources     复制并处理资源文件,至目标文件夹,准备打包。
  • compile     编译项目的源码。
  • process-classes
  • generate-test-sources 
  • process-test-sources
  • generate-test-resources
  • process-test-resources     复制并处理资源文件,至目标測试文件夹。
  • test-compile     编译測试源码。
  • process-test-classes
  • test     使用合适的单元測试框架执行測试。这些測试代码不会被打包或部署。
  • prepare-package
  • package     接受编译好的代码,打包成可公布的格式,如 JAR 。
  • pre-integration-test
  • integration-test
  • post-integration-test
  • verify
  • install     将包安装至本地仓库,以让其他项目依赖。
  • deploy     将终于的包拷贝到远程的仓库,以让其他开发者与项目共享。

基本上,依据名称我们就能猜出每一个阶段的用途,关于其他阶段的解释,请參考 http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

 

记住,执行不论什么一个阶段的时候,它前面的全部阶段都会被执行,这也就是为什么我们执行mvn install的时候,代码会被编译,測试,打包。

 

此外,Maven的插件机制是全然依赖Maven的生命周期的,因此理解生命周期至关重要,在之后的文章里,我将会进一步解释Maven的插件机制。

总结

       刚刚接触,还需在项目中,逐步深入的理解,站在巨人的肩膀上学习,成长还是比較快的;知识的学习都是通过对照,在gxpt中非常多内容都是对照NET的知识学习,理解的也深刻、效果不错;抽象的能力的培养尤其重要,看着师哥们抽象的底层,处处体现着抽象带来的软件复用的高效,老师常常也在谈,抽象不要仅仅说,更要我们要不断的运用到自己的实际项目中,TO DO,TO DO!!!



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119226.html原文链接:https://javaforall.net

(0)
上一篇 2021年11月14日 上午7:00
下一篇 2021年11月14日 上午8:00


相关推荐

  • C语言输出的字体和背景颜色你会设置吗!

    C语言输出的字体和背景颜色你会设置吗!学了那么久C语言,难免会所写对程序输出内容颜色感到单调,总想整点酷的东西………

    2022年6月20日
    28
  • android传感器高级编程_传感器程序编写

    android传感器高级编程_传感器程序编写1.Android的三大类传感器Android传感器按大方向划分大致有这么三类传感器:动作(Motion)传感器、环境(Environmental)传感器、位置(Position)传感器。(1)动作传感器这类传感器在三个轴(x、y、z)上测量加速度和旋转角度。包括如下几个传感器:加速(accelerometer)传感器、重力(gravity)传感器、陀螺仪(gyrosc

    2026年4月18日
    4
  • (一)Rxjava2+Retrofit完美封装

    (一)Rxjava2+Retrofit完美封装本篇文章已授权微信公众号 guolin blog 郭霖 独家发布要说 2016 年最火的 Android 技术是什么 毫无疑问肯定是 RxJava Retrofit Mvp 现如今 2017 年也已经过了快一半了 相信做 android 开发的小伙伴对 RxJava 和 Retrofit 也不再陌生 即使没有刻意的去学习过 也应该对 RxJava 和 Retrofit 有个一知半解 去年的时候学习了 Rxjava 和 Retr

    2025年11月20日
    5
  • 【AI大模型展】讯飞星火认知大模型——解放生产力,释放想象力

    【AI大模型展】讯飞星火认知大模型——解放生产力,释放想象力

    2026年3月14日
    3
  • docker复制文件到宿主机_下面哪几个属于docker网络模式

    docker复制文件到宿主机_下面哪几个属于docker网络模式自从Docker容器出现以来,容器的网络通信就一直是被关注的焦点,也是生产环境的迫切需求。容器的网络通信又可以分为两大方面:单主机容器上的相互通信,和跨主机的容器相互通信。 一、端口映射(局域网,外网此方式均可)。此种方式是将容器的某个端口映射到宿主机的某个端口,其它主机访问容器提供的服务需要通过宿主机的IP进行访问:dockerrun-p9000:8000–namec…

    2022年8月21日
    11
  • vue实现的后台管理系统

    vue实现的后台管理系统vue 后台管理系统记录一次后台管理系统项目 需要的朋友私聊我拿源码 vue 后台管理系统介绍效果图代码实现登录用户页权限页路由总结介绍 nbsp nbsp nbsp nbsp nbsp nbsp nbsp 这是在在学校对 vue 进行学习后搭建的小项目 该后台管理系统为 spa 单页项目 前后端分离 实现了登录 身份鉴别 用户管理 角色查看 权限管理 实现了基本的增删改查功能 可以为用户设置权限 实现了登录拦截 用户增删改查 权限给予 剥夺 查看等功能 可以作为不同类型网站后台的复用 amp n

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号