史上最全面的Maven使用教程(视频|资料)
软件是一个工程
我们在日常生活常能听到工程这个词,像桥梁工程、道路工程、南水北调工程等等。
工程说简单点就是各个行业的从业人员通过总结规律或者方法,以最短的时间和人力、物力来做出高效可靠的东西。我们也就能理解桥梁工程,其实就是人们通过经验的总结和各种研究得出来的、用来修建桥梁时所采用的高效的方法,当然这种方法是可复用的。我们将这种作工程的思想应用到软件上,于是就产生了—软件工程。
软件工程:为了能够实现软件的流水线式生产,在设计和构建软件时能够有一种规范和工程化的方法,人们便提出了软件工程概念。
Maven是Apache软件基金会组织维护的一款自动化构建工具,专注服务于Java平台的项目构建和依赖管理。Maven这个单词的本意是:专家,内行,读音是[\’meɪv(ə)n]或[\’mevn]。
Maven 是目前最流行的自动化构建工具,对于生产环境下多框架、多模块整合开发有重要作用,Maven 是一款在大型项目开发过程中不可或缺的重要工具,Maven通过一小段描述信息可以整合多个项目之间的引用关系,提供规范的管理各个常用jar包及其各个版本,并且
可以自动下载和引入项目中。
本课程详细介绍了Maven的高级操作:继承、聚合、多模块项目管理等方面的内容方方面面,是一线开发必不可少的内容
上面的内容做个日常生活的类比,做道菜就是一个工程。今天心情好,想吃红烧肉,自动动手做:
1. 想买什么猪的那个位置的肉,黑猪肉,土猪肉等,使用冰糖还是绵白糖,用什么牌子的酱油等
2. 到菜市场购买各种原料。
3. 准备材料,洗肉,切块,花椒,大料等
4. 开始做了,肉下锅炖煮,不同时间加入花椒,大料,冰糖,酱油
5. 炖煮一段时间后,看肉是否熟透,尝试口味,是不是咸了等等
6. 做好了,开始吃了
7. 需要刷碗,倒垃圾
这些工作从头做到尾步骤非常繁琐,每个步骤都是费时费力的。所以才出现净菜,半成品菜,拿回家直接做可以了,只做 6,7 步骤就可以 。
软件开发需要编译代码—>开发人员自己测试代码—>把代码打包—>部署项目到测试服务器—>测试人员测试功能—>测试测试出bug
开发人员需要修改bug—>开发人员自己测试代码—>把代码打包—>部署项目到测试服务器—>测试人员测试功能—>直到符合功能要求。
上述过程需要重复多次,大型项目中构建项目比较复杂,有很多的配置文件,jar 文件,多个子项目等等。都用人力完成费时费力,效率比较低。maven 可以让我们从上面的工作中解脱出来。
Maven 是自动化构建工具。
传统项目开发存在的问题
一个项目做成一个工程,造成工程比较庞大,需要使用多模块来划分项目;
项目中需要的数量众多的jar 包,需要手动下载并引入,并且多个项目需要的jar 包存在重复的问题;
项目中需要的jar 包有版本兼容的问题,需要手动解决; 项目中需要的jar 包又依赖其它的jar 包,需要手动解决。
Maven 概述
Maven 是Apache 软件基金会组织维护的一款自动化构建工具,专注服务于Java 平台的项目构建和依赖管理。Maven 这个单词的本意是:专家,内行。读音是[\’meɪv(ə)n]或[\’mevn]。
Maven 是目前最流行的自动化构建工具,对于生产环境下多框架、多模块整合开发有重要作用,Maven 是一款在大型项目开发过程中不可或缺的重要工具。
Maven 可以整合多个项目之间的引用关系,我们可以根据业务和分层需要任意拆分一个项目;
Maven 提供规范的管理各个常用jar 包及其各个版本,并且可以自动下载和引入项目中;
Maven 可以根据指定版本自动解决jar 包版本兼容问题; Maven 可以把jar包所依赖的其它jar 包自动下载并引入项目。
类似自动化构建工具还有:Ant, Maven, Gradle。
构建(build),是面向过程的(从开始到结尾的多个步骤),涉及到多个环节的协同工作。
构建过程的几个主要环节
①清理:删除以前的编译结果,为重新编译做好准备。
②编译:将Java源程序编译为字节码文件。
③测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
④报告:在每一次测试后以标准的格式记录和展示测试结果。
⑤打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java工程对应jar 包,Web工程对应war包。
⑥安装:在Maven环境下特指将打包的结果——jar包或war包安装到本地仓库中。
⑦部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行
Maven 核心概念
Maven能够实现自动化构建是和它的内部原理分不开的,这里我们从Maven的九个核心概念入手,看看Maven是如何实现自动化构建的?
①POM
②约定的目录结构
③坐标
④依赖管理
⑤仓库管理
⑥生命周期
⑦插件和目标
⑧继承
⑨聚合
Maven特点
那么,Maven 和 Ant 有什么不同呢?
在回答这个问题以前,首先要强调一点:Maven 和 Ant 针对构建问题的两个不同方面。Ant 为 Java 技术开发项目提供跨平台构建任务。Maven 本身描述项目的高级方面,它从 Ant 借用了绝大多数构建任务。因此,由于 Maven 和 Ant代表两个差异很大的工具。所以接下来只说明这两个工具的等同组件之间的区别,如表 1 所示。
Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。
此外,Maven能够很方便的帮你管理项目报告,生成站点,管理JAR文件,等等。
安装 Maven 环境
1、确保安装了java 环境:maven 本身就是java 写的,所以要求必须安装JDK。
查看java 环境变量:echo %JAVA_HOME%
2、下载并解压maven 安装程序:
http://maven.apache.org/download.cgi
3、配置 Maven 的环境变量:
MAVEN_HOME=d:/apache-maven-3.3.9 或 者M2_HOME=d:/apache-maven-3.3.9 path=%MAVEN_HOME%/bin; 或者%M2_HOME%/bin;
4、验证是否安装成功: mvn –v
Maven 的核心概念
Maven 工程约定目录结构
maven 中约定的目录结构:
Hello
|—src
|—|—main
|—|—|—java
|—|—|—resources
|—|—test
|—|—|—java
|—|—|—resources
|—pom.xml
说明:
- Hello:根目录,也就是工程名
- src:源代码
- main:主程序
- java:主程序的java 源码
- resources:主程序的配置文件
- test:测试程序
- java:测试程序的java 源码
- resources:测试程序的配置文件
- pom.xml:Maven工程的核心配置文件。
一般情况下,我们习惯上采取的措施是:约定>配置>编码
maven 的pom.xml 记录的关于构建项目的各个方面的设置,maven 从pom.xml 文件开始,按照助约定的工程目录编译,测试,打包,部署,发布项目。
第一个maven 工程
按照如下步骤,实现第一个maven 项目,以 maven 推荐的约定方式创建目录,类文件。
1. 某个目录中创建文件夹Hello
2. 在Hello 中创建子目录 src
3. 拷贝pom.xml 到Hello 目录和src 是同级放置的。
4. 进入src 目录,创建main, test 目录
5. 进入main 目录,创建 java,resources 目录。
6. 进入java 目录,创建目录 com/bjpowernode/
在 com/bjpowernode/目录下创建 HelloMaven.java 文件,定义 int addNumber(int n1,n2){ return n1+n2};
定义public static void main(String args[]) { System.out.prinltn(“Hello Manven”); //也可以调用 addNumber()方法 }
7. 进入到Hello 目录在,执行 mvn compile
8. 进入到target/classes 目录执行 java
com.bjpowernode.HelloMaven
pom 文件
即Project Object Model 项目对象模型。Maven 把一个项目的结构和内容抽象成一个模型,在xml 文件中进行声明,以方便进行构建和描述, pom.xml 是 Maven 的灵魂。所以,maven 环境搭建好之后,所有的学习和操作都是关于pom.xml 的。
pom.xml 初识: