Maven
Maven 是一项比较重要的技术,之后我们学习的很多技术点,包括Mybatis的学习(马上整理发送)都是用的Maven进行的依赖jar包的管理
一、Maven简介
1.1 Maven产生的背景
-
完成一个项目需要完成的工作
-
1、分析项目,知道项目的组成成分
-
2、设计项目,步骤、技术、人力、时间
-
3、组建团队,购买设备、服务器、软件、笔记本
-
4、开发人写代码 ---- > 开发人员测试代码(重复多次)
测试人员测试代码,测试项目功能是否符合要求 — 开发人员修改测试 ---- 测试人员测试 — 还有问题,移交开发人员…— 没问题,部署,通过
-
-
传统开发项目的问题
- 1、手工管理模块关系比较繁琐
- 2、需要很多第三方软件,需要的jar文件,需要手工下载
- 3、需要管理jar包的版本
- 4、管理jar文件之间的依赖
- 依赖:a.jar需要b.jar才能运行,这个关系叫做依赖(a依赖于b);或者项目中需要mysql驱动,那么也可以叫做这个项目依赖mysql驱动
-
改进项目的开发和管理:
- 1、管理jar文件;
- 2、自动下载jar文件和他的文档,源代码;
- 3、管理jar之间的依赖,a.jar需要b.jar,maven会自动下载b.jar
- 4、管理你需要的版本
- 5、帮你编译程序,把java编译为class
- 6、帮你测试你的代码是否正确
- 7、帮你打包文件,形成jar包和war包
- 8、帮你部署项目
1.2 Maven概述
- 官网:https://maven.apache.org/
- 构建:项目的构建,面向过程,完成项目代码的编译、测试、运行、打包、部署等
- maven支持的构建包括
- 1、清理:将之前项目编译的东西删除掉,为新的代码重新进行编译做准备;
- 2、编译:将程序源代码编译为执行代码,java–class文件这个编译是批量的(同时操作);
- 3、测试:maven可以执行测试代码,验证你的功能是否正确,也是批量的(同时操作);
- 4、报告:生成测试结果的文件,测试通过没有;
- 5、打包:把项目中所有的class文件,配置文件等所有资源打包到一个压缩文件当中(此文件为项目的结果文件。java一般是.jar , web应用是.war包)
- 6、安装:把5中的.jar或者.war文件安装到本地仓库
- 7、部署:把程序安装好可以执行。
- maven支持的构建包括
1.3 Maven核心概念
- Maven可以实现自动化构建,有9个核心概念
- 1、POM文件
- pom.xml文件,项目对象模型。maven把一个项目当作一个模型来使用。
- 作用:控制maven构建项目的过程,管理jar依赖
- 是maven的核心!
- 2、约定的目录结构
- maven项目的结构和文件的位置都是规定的。
- 3、坐标
- 是一个字符串,用来表示资源的
- 4、依赖管理
- 用来管理项目中可以使用的jar文件
- 5、仓库管理
- 资源存放的位置
- 6、生命周期
- maven构建项目的过程
- 7、插件和目标
- 执行maven构建的时候用的工具是插件
- 8、继承
- 类似于java中继承的概念
- 9、聚合
- 将项目归纳到一起
- 1、POM文件
1.4 安装Maven环境
- 下载maven3.6.1
- 下载到非中文目录,解压即可
- 子目录:
- bin:执行程序,主要是mvn.cmd
- conf:maven本身的配置文件settings.xml
- 子目录:
- 配置环境变量
- Path下到bin目录
- MAVEN_HOME到bin的上级目录
- 验证:mvn -v
- 注意:需要JAVA_HOME
二、Maven的核心概念
2.1 Maven工程的目录结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nBE0ZWgK-1617511752027)(D:\Study\For OutClass\Profession\杂\Maven\Maven.assets\20210316232240.png)]
- 和java目录平级的是resources目录,存放各种配置文件
- 编译文件命令:mvn compile
- 编译的作用域:整个Hello工程main文件下的所有java文件,以及resources下的文件到target/classes文件夹下
- 编译的位置:Hello工程目录下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D6h8Vb5G-1617511752028)(D:\Study\For OutClass\Profession\杂\Maven\Maven.assets\20210317121723.png)]
- 会生成一个target目录,此目录为结果目录
- 其中的classes保存java代码编译后生成的class文档以及resources下复制过来的文件
- maven-status存放编译这个文件需要的依赖(包括命令的依赖和java代码的依赖)
- generated-sourced存放
2.2 pom文件
-
是项目对象模型,再xml文件中进行声明,以方便构建,pom.xml是maven的核心,是maven的灵魂
-
基本信息
-
modelVersion:Maven模型的版本,对于Maven2和Maven3而言,只能是4.0.0
-
gav坐标:
-
groupId:组织id,一般是域名的倒写,还可以在此之上写下自己的项目名称
-
artifactId:项目名称、模块名称,对应groupId中的子项目
-
version:版本号,如果项目还在开发中,那么就是不稳定版本。特征:-SNAPSHOT;此外,maven使用三个数字标识
-
packing:项目打包的类型,jar、war、rar、ear、pom。默认是jar
<!--坐标--> <groupId>公司域名的倒写</groupId> <artifactId>自定义项目的名称</artifactId> <version>自定义版本号</version>
-
-
依赖:dependencies和dependency
- jar包是maven中的依赖
- maven管理jar包的方式是dependency
- maven中的依赖类似于java中的import
<dependencies> <!-- dependencies下可以管理多个dependency 一个dependency就是一个依赖的项目 下面这个是junit的依赖项目,使用gav坐标进行识别--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!-- 除此之外,还可以添加别的依赖,比如添加mysql驱动 只要用dependency标签将mysql驱动的gav坐标进行包裹即可--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> </dependencies>
-
配置属性:properties
- 用于配置一定的文件属性,例如project.build.Encoding(项目构建源码编码方式),可以设置为UTF-8,防止中文乱码,也可以定义 版本号,便于日后升级
<properties>
<project.build.sourceEncoding>UTF8
</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
- 构建:build
- 表示与构建相关的配置,例如设置编译插件的jdk版本
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>