说说Maven的约定>配置>编码

Maven 介绍

maven是一个软件工程(Software Project)管理工具。 对于maven来说,一个软件工程的唯一标识是由groupId+artifactId+version共同决定的。

每个工程都有一个打包类型,可以是jar, war, ear 或 pom。打包类型决定了工程最终产物的类型。 其中pom类型用于构件多模块工程。工程之间有两种关系:依赖和聚合。

Maven 工程约定

目录结构:

  • 根目录 : 工程名。
  • src目录:源码。
  • pom.xml文件 :Maven工程核心配置文件。
  • main目录:存放主程序。
  • test目录:存放测试程序。
  • java目录:存放Java源文件。
  • resources目录:存放框架或其他工具配置文件。


Maven唯一标识(坐标)


  • groupid: 公司或组织域名倒序+项目名。
  • artifactid:模块名。
  • version: 版本。


Maven 依赖管理

Maven 依赖范围

scope 属性我们需要了解其中的四种:compile/test/perovided/runtime。

  • compile:编译依赖范围,scope属性的默认值,表示在编译,测试,系统运行时 都需要此jar包,比如:log4j.jar。
  • test:测试依赖范围表示只是在测试的过程中需要用到此jar包,比如:junit.jar。
  • provided:已提供依赖范围,表示在编译,测试时需要用到此jar包,但是在正 式的运行环境中,不需要此jar包,因为运行的容器已经提供,比如:servlet-api.jar。
  • runtime:运行时依赖范围,表示只在运行需要用到此jar包,比如:数据库驱 动的jar包。
  • system:系统依赖范围。该依赖与三种classpath的关系,和provided依赖范围完全一致。使用system范围的依赖时必须通过systemPath元素显式地指定依赖文件的路径。


Maven 依赖传递

以Project01项目和Project02项目为例,当Project02项目依赖Project01项目中,我们称Project02直接依赖Project01项目,同理Project01项目也直接依赖于log4j2.jar,而Project02对于或者log4j2.jar来说,是间接依赖的关系。

  • 间接依赖的范围是compile的时候(log4j2.jar),依赖会向下传递。
  • 间接依赖的范围是test的时候,依赖不会得以传递(junit.jar)。
  • 间接依赖的范围是provided的时候,依赖不会向下传递(servlet.jar)。
  • 间接依赖的范围是runtime的时候,依赖会向下传递(mysql.jar)。
  • 间接依赖的范围是system的时候,依赖会向下传递(mysql.jar)。


Maven 依赖冲突


  • 当一个项目中依赖同一个项目,但是不同的版本的情况下,以在配置文件中的位置最下方的版本为准(就近原则)。
  • 如果直接与间接依赖中包含有同一项目但是不同版本的资源依赖,以直接依赖的版本为准。


Maven 生命周期

Maven 生命周期就是项目构建的所有步骤。Maven对项目构建所有的步骤进行了抽象和统一,包括项目清理、初始化、编译、打包、测试、部署等几乎所有构建步骤。


    Maven中有三套相互独立的生命周期:
  • Clean Lifecycle: 在进行真正的构建之前进行一些清理工作。
  • Default Lifecycle: 构建的核心部分,编译,测试,打包,部署等等。
  • Site Lifecycle: 生成项目报告,站点,发布站点。


Copyright © 2019-2019主引教程mainboot.com All Rights Reserved. 备案号: 闽ICP备13019624号-4