maven
文章目录
- maven
- 什么是maven
- 为什么使用maven
- 项目构建过程的几个主要环节
- maven核心概念
-
什么是maven
Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和 依赖管理。Maven 这个单词的本意是:专家,内行。
为什么使用maven
在今天的 JavaEE 开发领域,有大量的第三方框架和工具可以供我们使用。要使用这些 jar 包最简单 的方法就是复制粘贴到 WEB-INF/lib 目录下。但是这会导致每次创建一个新的工程就需要将 jar 包重复复 制到 lib 目录下,从而造成工作区中存在大量重复的文件,让我们的工程显得很臃肿。 而使用 Maven 后每个 jar 包本身只在本地仓库中保存一份,需要 jar 包的工程只需要以坐标的方式 简单的引用一下就可以了。不仅极大的节约了存储空间,让项目更轻巧,更避免了重复文件太多而造成 的混乱。
JavaEE 开发中需要使用到的 jar 包种类繁多,几乎每个 jar 包在其本身的官网上的获取方式都不尽相 同。为了查找一个 jar 包找遍互联网,身心俱疲,没有经历过的人或许体会不到这种折磨。不仅如此, 费劲心血找的 jar 包里有的时候并没有你需要的那个类,又或者又同名的类没有你要的方法——以不规 范的方式获取的 jar 包也往往是不规范的。 使用 Maven 我们可以享受到一个完全统一规范的 jar 包管理体系。你只需要在你的项目中以坐标的 方式依赖一个 jar 包,Maven 就会自动从中央仓库进行下载,并同时下载这个 jar 包所依赖的其他 jar 包
——规范、完整、准确!一次性解决所有问题!
引入 Maven 后,Maven 就可以替我们自动的将当前 jar 包所依赖的其他所有 jar 包全部导入进来, 无需人工参与,节约了我们大量的时间和精力。用
随着 JavaEE 项目的规模越来越庞大,开发团队的规模也与日俱增。一个项目上千人的团队持续开 发很多年对于 JavaEE 项目来说再正常不过。那么我们想象一下:几百上千的人开发的项目是同一个 Web 工程。那么架构师、项目经理该如何划分项目的模块、如何分工呢?这么大的项目已经不可能通过 package 结构来划分模块,必须将项目拆分成多个工程协同开发。多个模块工程中有的是 Java 工程,有 的是 Web 工程。 那么工程拆分后又如何进行互相调用和访问呢?这就需要用到 Maven 的依赖管理机制。大家请看 我们的 Survey 调查项目拆分的情况:
项目构建过程的几个主要环节
- 清理:删除以前的编译结果,为重新编译做好准备。
- 编译:将Java源程序编译为字节码文件
- 测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性
- 报告:在每一次测试后以标准的格式记录和展示测试结果
- 打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java工程对应jar包,web工程对应war包。
- 安装:将maven环境下特指打包的结果——jar包或war包安装到本地仓库中
- 部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行
maven核心概念
-
POM
Project Object Model:项目对象模型。将Java工程的相关信息封装为对象作为便于操作和管理的模型。Maven工程的核心配置。
-
约定的目录结构
-
坐标
-
依赖管理
1. 引入依赖:
<dependency>
<groupId>com.atguigu.maven</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
2.依赖的范围
| compile | test | provided |
---|
主程序 | √ | × | √ |
测试程序 | √ | √ | √ |
参与部署 | √ | × | × |
-
仓库管理
- 本地仓库:为当前本地电脑上的maven工程服务
- 远程仓库:
- 私服:架设在当前局域网环境下,为当前局域网范围内的所有maven工程服务
- 中央仓库:架设在Internet上,为全世界所有maven工程服务
- 中央仓库的镜像:架设在各个大洲,为中央仓库分担流量,减轻中央仓库压力,同时更快的响应用户请求
-
生命周期
Maven 生命周期定义了各个构建环节的执行顺序,有了这个清单,Maven 就可以自动化的执行构建命令了。
maven有三套相互独立的生命周期,分别是:
-
Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
-
Default Lifecycle 构建的核心部分,编译,测试,打包,安装,部署等等。
-
Site Lifecycle 生成项目报告,站点,发布站点。
使用:mvn+生命周期名称(即把Lifecycle 去掉)
-
clean生命周期:
- pre-clean: 执行一些需要在clean之前完成的工作
- clean: 移除所有上一次构建生成的文件
- post-clean 执行一些需要在clean之后立刻完成的工作
-
site生命周期
- pre-site 执行一些需要在生成站点文档之前完成的工作
- site 生成项目的站点文档
- post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
- site-deploy 将生成的站点文档部署到特定的服务器上
-
插件和目标
-
继承
由于非compile范围的依赖信息是不能在“依赖链”中传递的,所以有需要的工程只能单独配置,
示例:
-
在子工程中引用父工程
<parent>
<groupId>com.atguigu.maven</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 指定从当前子工程的pom.xml文件出发,查找父工程的pom.xml的路径 -->
<relativePath>../Parent/pom.xml</relativePath>
</parent>
-
在父工程中管理依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
-
在子项目中重新指定需要的依赖,删除范围和版本号
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
-
聚合
为什么要使用聚合?
1 为什么要使用聚合? 将多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能够生效。修改源码后也需要逐个手动进 行 clean 操作。而使用了聚合之后就可以批量进行 Maven 工程的安装、清理工作。
如何配置聚合?
在总的聚合工程中使用 modules/module 标签组合,指定模块工程的相对路径即可
<modules>
<module>../Hello</module>
<module>../HelloFriend</module>
<module>../MakeFriends</module>
</modules>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)