提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
Maven学习笔记(一)
一、Maven简介
Maven 是一款基于 Java 平台的项目管理和整合工具,它将项目的开发和管理过程抽象成一个项目对象模型。开发人员只需要做一些简单的配置,Maven 就可以自动完成项目的编译、测试、打包、发布以及部署等工作。它和 Java 一样具有跨平台性,这意味着无论是在 Windows ,还是在 Linux 或者 Mac OS 上,都可以使用相同的命令进行操作。
且Maven 使用标准的目录结构和默认构建生命周期,因此开发者几乎不用花费多少时间就能够自动完成项目的基础构建工作。
工作机制
Maven作为依赖管理工具
借助maven可以将一个项目拆分成多个工程。
maven引用jar包,使得重复被使用的jar包只有一份,节省了存储资源。
且maven可以通过“统一的规范”正规下载jar包,这些jar包被放在了maven的中央仓库中。
更加的规范容易获取。
一个jar包依赖的其他jar包,需要自己手动加入到项目中。但maven其实本质上封装了jar包之间的依赖关系,程序员只需要引用所需要的jar包就可以了,简化的工作内容。
Maven作为构建管理工具
Maven可利用一系列的资源去生产一个可运行的项目。
通过编译,部署,构建三个过程
编译:将java源文件编译为class文件。
部署:一个BS项目最终运行的不是动态Web工程本身,而是这个工程“编译过后的结果”。web工程的目录和最终工程编译后的结果目录是不一致的。
构建:将打包过后的项目复制到仓库中的指定位置后将动态Web程序生成的war包复制到servlet容器下的指定目录,使其可以运行。
Maven POM
POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。
在执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。
创建 POM 之前,我们首先需要描述项目组 (groupId), 项目的唯一ID。
<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>
<!-- 公司或者唯一标志,并且配置时生成的路径也是由此生成,如com.company.project-group,maven会将该项目打成的jar包放本地路径:/com/company/project-group -->
<groupId>com.companyname.project-group</groupId>
<!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
<artifactId>project</artifactId>
<!-- 版本号 -->
<version>1.0</version>
</project>
且所有 POM 文件都需要 project 元素和三个字段:groupId,artifactId,version。
其中
groupId:公司或者组织域名+项目名
artifactId:模块名称
version:版本
依赖
maven解析依赖时会到本地仓库去查找被依赖的jar包,使用install安装后就可以进入仓库。
compile范围依赖:
对主程序有效
对测试程序有效
参与打包
参与部署
test范围依赖:
对主程序无效
对测试程序有效
不参与打包
不参与部署
provided范围依赖
对主程序有效
对测试程序有效
不参与打包
不参与部署
只有compile范围的才能被传递,test和provided范围的在引用和被引用的模块之间都是相互独立的。
依赖的排除
配置方式
<dependency>
<groupId>com.atguigu.maven</groupId>
<artifactId>HelloFriend</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
<scope>compile</scope>
<exclusions>
< exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</ exclusion>
</exclusions>
</dependency>
排除目标jar对项目的影响。