说说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: 生成项目报告,站点,发布站点。