学习Maven之前先了解传统项目开发存在的问题
过去传统的项目开发需要很多繁琐的配置,各种包、类什么的,一不小心就很容易搞错,所以现在会出现很多框架、工具帮助我们更加高效的开发。
我一直在思考为什么要用Maven搭建框架,为什么不直接使用spring、spring Initializr来搭建?
原因:Apache Maven是一个(特别是Java编程)项目管理及自动构建工具。我还以为Maven跟spring是同一级别的,都是框架,原来Maven不是框架,是工具、管理第三方的外部依赖。
maven跟spring没有关系,它们是两个东西,maven是一个项目管理工具。简单点说就是提供自动下载关键jar包用的,但是不仅仅如此。
而spring是一个bean容器,是两个概念。两者可以结合使用
总结:Maven是自动化构建工具,在Idea中使用Maven是为了更好的管理依赖、构建项目、管理项目信息。Maven是搭建SSM框架的辅助,使SSM框架的搭建更容易、使整个开发过程更高效、快捷。
Maven自动化的构建工具
第一章 Maven简介
1.1软件开发中的阶段
需求分析:分析项目具体完成的功能,有什么要求,具体怎么实现。
设计阶段:根据分析的结果,设计项目的使用什么技术,解决难点。
开发阶段:编码实现功能。编译代码。自我测试
测试阶段:专业的测试人员,测试整个项目的功能十分符合设计要求。出一个测试报告。
项目的打包,发布阶段:给用户安装项目
1.2 什么是Maven?Maven能做什么?
maven 三大功能:管理依赖、构建项目、管理项目信息。
1)项目的自动构建,帮助开发人员做项目代码的编译、测试、打包、安装、部署等。
2)管理依赖(管理项目中使用的各种jar包):
依赖:项目中需要使用的其他资源,常见的是jar,比如项目要使用MySQL驱动,我们就说项目依赖MySQL驱动。
第二章 Maven的核心
1. 文件和目录结构
文件:
听说3.3.9版本比较稳定
项目:
2.POM.xml
Project Object Model 项目对象模型, maven把项目当做模型处理。 操作这个模型就是操作项目。
maven通过pom.xml文件实现 项目的构建和依赖的管理。
即 Project Object Model 项目对象模型。Maven 把一个项目的结构和内容抽象成一个模型,在 xml 文件中进行声明,以方便进行构建和描述,pom.xml 是 Maven 的灵魂。所以,maven 环境搭建好之后,所有的学习和操作都是关于 pom.xml 的。
3. 坐标GAV
搜索坐标的地址: https://mvnrepository.com/
4. packaging
项目打包的类型, 有jar ,war, ear, pom等等 默认是jar
当开发一个应用程序后这个应用程序包含了很多类,如果需要把这个程序提供给别人使用,通常会将这些类文件打包成一个JAR文件,把这个文件提供给别人使用。只要在别人系统的CLASSPATH环境变量中添加这个文件,则java虚拟机就可以自动在内存中解压这个jar包。
war模式:将WEB工程以包的形式上传到服务器 ;
war exploded模式:将WEB工程以当前文件夹的位置关系上传到服务器;war:先打包成war包,再把该war包部署到服务器上
war exploded:直接把文件夹、class文件等等移到Tomcat上进行部署。因此这种方式支持热部署,一般在开发的时候都是使用这种模式。
参考:java中jar包的生成与使用
5.依赖
依赖:项目中要使用的其他资源(说白了就是jar)。
- 需要在pom.xml文件中,使用dependencies 和dependency, 还有gav 完成依赖的说明。
6.属性Properties
properties 是用来定义一些配置属性的,例如project.build.sourceEncoding(项目构建源码编码方式),可以设置为 UTF-8,防止中文乱码,也可定义相关构建版本号,便于日后统一升级。
7.build
build 表示与构建相关的配置,例如设置编译插件的 jdk 版本
8.仓库
仓库是存放东西的,Maven 仓库的是:
- Maven 的插件,插件也是一些 jar,这些 jar 可以完成一定的功能。
- 我们自己开发项目的模块
- 第三方框架或工具的 jar 包
Maven 默认是从中央仓库下载包的,中央仓库在国外,速度很慢,所以大多数公司都会自建 Maven 私服,你们公司用到的 Maven 仓库,基本上也是通过下面这种方式搭建的。
使用仓库
在 Maven 构建项目的过程中如果需要某些插件,
首先会到 Maven 的本地仓库中查找,如果找到则可以直接使用;
如果找不到,它会自动连接外网,到远程中央仓库中查找;
如果远程仓库中能找到,则先把所需要的插件下载到本地仓库,然后再使用,并且下次再用到相同的插件也可以直接使用本地仓库的;
如果没有外网或者远程仓库中也找不到,则构建失败。
9.Maven的生命周期——项目构建的各个阶段
Maven 提供一个项目构建的模型,把 (清理、编译、测试、报告、打包、安装、部署)都对应成一个个的生命周期阶段,并对每一个阶段提供相应的命令,程序员只需要掌握一小堆命令,就可以完成项目的构建过程。
包括:清理、编译、测试、报告、打包、安装、部署
插件:要完成构建项目的各个阶段,要使用maven的命令,执行命令的功能是通过插件完成的
插件就是jar包、一些类
命令:执行maven功能由命令发出
10.maven命令——执行以下命令必须在命令行进入 pom.xml 所在目录
- mvn clean:请理,作用:删除原来编译和测试的目录,即 target 目录,但是已经install 到仓库里的包不会删除
target是用来存放项目构建后的文件和目录、jar包、war包、编译的class文件
- mvn compile:编译命令(会在当前目录下生成一个 target,里边存放编译主程序之后生成的字节码文件)
把src/main/java 中的Java编译为class文件。同时把class文件拷贝到target/classes目录(类路径/根目录,classpath) - mvn test-compile: 编译命令(会在当前目录下生成一个 target,里边存放编译测试程序之后生成的字节码文件)
编译src/test/java目录中的源文件, 把生成的class拷贝到target/test-classes目录。同时把src/test/resources目录中的文件拷贝到 test-clasess目录 - mvn test 测试(会生成一个目录surefire-reports,保存测试结果)
- mvn package:打包(会编译、编译测试、测试、并且按照 pom.xml 配置把主程序打包生成 jar 包或者 war 包)
作用是把项目中的资源class文件和配置文件都放到一个压缩文件中, 默认压缩文件是jar类型的。 web应用是war类型 - mvn install 安装主程序(会把本工程打包,并且按照本工程的坐标保存到本地仓库中)
- mvn deploy 部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中。还会自动把项目部署到 web 容器中)。
11.单元测试(junit):一个方法就是一个单元,方法是测试的最小单元;需要加入依赖
补充:
4. 类似自动化构建工具还有:Ant, Maven, Gradle。
5. 构建过程中的各个环节:清理、编译、测试、报告、打包、安装、部署。