Maven学习笔记总结

Posted ascto

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Maven学习笔记总结相关的知识,希望对你有一定的参考价值。

Maven学习总结

一、Maven简介

1.1软件是一个工程

我们在日常生活常能听到工程这个词,像桥梁工程、道路工程、南水北调工程等等。工程说简单点就是各个行业的从业人员通过总结规律或者方法,以最短的时间和人力、物力来做出高效可靠的东西。我们也就能理解桥梁工程,其实就是人们通过经验的总结和各种研究得出来的、用来修建桥梁时所采用的高效的方法,当然这种方法是可复用的。我们将这种作工程的思想应用到软件上,于是就产生了—软件工程。

​ 软件工程:为了能够实现软件的流水线式生产,在设计和构建软件时能够有一种规范和工程化的方法,人们便提出了软件工程概念

软件开发需要编译代码–>开发人员自己测试代码–>把代码打包–>部署项目到测试服务器–>测试人员测试功能->测试测试出bug 。
​ 开发人员需要修改bug- ->开发人员自己测试代码- ->把代码打包- ->部署项目到测试服务器-
->测试人员测试功能->直到符合功能要求。 ​ 上述过程 需要重复多次,大型项目中构建项目比较复杂,有很多的配置文件,jar文件,多个子项目等等。都用人力完成费时费力,效率比较低。maven
可以让我们从上面的工作中解脱出来。

maven是自动化构建工具

1.2传统项目开发存在的问题

  1. 很多模块,模块之间有关系,手动管理关系,比较繁琐。
  2. 需要很多第三方功能,需要很多的jar包,需要手工从网络中获取各个jar包。
  3. 需要管理jar包的版本。假如你需要的是5.0的版本,那你不可以给一个4.0的版本。
  4. 管理jar文件之间的依赖。假如你的项目要使用a.jar 需要使用b.jar里面的类。必须首先获取到b.jar才可以,然后你才能使用a.jar。假如没有maven管理项目,你需要手动去管理、处理依赖。

1.3Maven概述

​ Maven是Apache软件基金会组织维护的一款自动化构建工具,专注服务于Java平台的项目构建和依赖管理。Maven 这个单词的本意是:专家,内行。 读音是['merIv(a)n]或['mevn]。

  1. maven可以管理jar文件

  2. 自动下载jar和它的文档、源代码

  3. 管理jar之间的依赖

  4. 管理你需要的jar的版本

  5. 帮你编译程序,将java编译为class

  6. 帮你测试你的代码是否正确

  7. 帮你打包文件,形成jar文件或者war文件

  8. 帮你部署项目

    什么是项目构建?

    ​ 构建是面向过程的,就是一些步骤,完成项目代码的编译、测试、运行、打包、部署等。

    maven所支持的构建包括有:

    1. 清理:把之前项目编译的东西删除掉,把新的编译代码做准备
    2. 编译:把程序源代码编译为执行代码,java-class文件。(批量的 ,maven可以同时把成百上千的文件编译为class,与javac不一样,javac一次编译一个文件)
    3. 测试:maven可以执行测试程序代码,验证你的功能是否正确。(批量的。maven可以同时执行多个测试代码和同时测试多个功能)
    4. 报告:生产测试结果的文件,测试通过没有。
    5. 打包:如果测试通过,把你的项目中所有的class文件,配置文件等所有资源放到一个压缩文件中,这个压缩文件就是项目的结果文件,通常java程序压缩文件是jar扩展名的。对于web应用,压缩文件扩展名是.war。
    6. 安装:把5中生成的jar文件、war文件安装到本机仓库
    7. 部署:把我们的程序安装好可以执行。

1.4Maven核心概念

Maven能够实现自动化构建是和它的内部原理分不开的,这里我们从maven的九个核心概念入手,看看maven是如何实现自动化构建的

想要用好maven,必须了解这些概念

  • POM:一个文件 名称是pom.xml,pom翻译过来叫做项目对象模型。maven把一个项目当作一个模型使用。可以控制maven构建项目的过程,管理jar依赖。
  • 约定的目录结构:maven项目的目录和文件的位置都是规定的。
  • 坐标:是一个唯一的字符串,用来表示资源的。
  • 依赖管理:管理你的项目中可以使用的jar文件。
  • 仓库管理(了解):你的资源存放的位置。
  • 生命周期(了解):我们使用maven构建项目的过程。
  • 插件和目标(了解):执行maven构建的时候使用的工具是插件。
  • 继承(*)
  • 聚合(*)

二、Maven的核心概念

2.1Maven工程约定目录结构

maven约定的目录项目,约定是大家都遵守的一个规则

每一个maven项目在磁盘中都是一个文件夹

maven中约定的目录结构

疑问:mvn complie 编译src/main目录下的所有Java文件。

1.为什么要下载?maven工具执行的操作需要很多插件(jar文件)完成的

2.下载什么东西了?插件(完成某些功能)

3.下载的东西存到哪里了?默认仓库:c盘下.m2文件中

执行mvn compile ,结果是在项目的根目录下生成target目录(结果目录),maven编译的java程序,都放在target目录中。(.class文件)

小结

2.2pom文件

即Project Object Model项目对象模型。Maven把一个项目的结构和内容抽象成一个模型 ,在xml文件中进行声明,以方便进行构建和描述, pom.xml是Maven的灵魂。所以, maven环境搭建好之后,所有的学习和操作都是关于pom.xml的。

2.3仓库

仓库是什么?

仓库是存放东西的,存放maven使用的jar我们项目使用的jar

仓库的分类

本地仓库:就是你个人计算机上的文件夹,存放各种jar包

远程仓库:在互联网上的,使用网络才能使用的仓库。

​ 远程仓库又分为:中央仓库(最权威,世界上所有的开发人员都共享使用的集中仓库)。

中央仓库的镜像:就是中央仓库的备份,在各大洲各大城市都是镜像。

私服:在公司内部,局域网中使用,不对外使用。

仓库的使用

maven仓库的使用不需要人为的参与。

开发的人员需要使用mysql的驱动—>maven首先查本地仓库------->本地没有查私服(前提存在私服)----->都不行就访问镜像---->都不行,就中央仓库

2.4Maven的生命周期

清理、编译、测试、报告、打包、安装、部署

​ 对项目的构建是建立在生命周期模型上的,它明确定义项目生命周期各个阶段,并且对于每一个阶段提供相对应的命令,对开发者而言仅仅需要掌握一小堆的命令就可以完成项目各个阶段的构建工作。

​ 构建项目时按照生命周期顺序构建,每一个阶段都有特定的插件来完成。不论现在要执行生命周期中的哪个阶段,都是从这个生命周期的最初阶段开始的。

​ 对于我们程序员而言,无论我们要进行哪个阶段的构建,直接执行相应的命令即可,无需担心它前边阶段是否构建,Maven都会自动构建。这也就是Maven这种自动化构建工具给我们带来的好处。

2.5Maven的常见命令

  • ​ Maven对所有的功能都提供相对应的命令,要想知道maven都有哪些命令,那要看maven有哪些功能。开始就跟大家说了,maven三大功能:管理依赖、构建项目、管理项目信息。管理依赖,只需要声明就可以自动到仓库下载;管理项目信息其实就是生成一个站点文档,一个命令就可以解决,最后再说;那maven功能的主体其实就是项目构建。
  • ​ Maven提供一个项目构建的模型,把编译、测试、打包、部署等都对应成一个个的生命周期阶段,并对每一个阶段提供相应的命令,程序员只需要掌握一小堆命令,就可以完成项目的构建过程。mvn clean清理( 会删除原来编译和测试的目录,即target目录,但是已经install到仓库里的包不会删除)mvn compile编译 主程序(会在当前目录下生成一个target,里边存放编译主程序之后生成的字节码文件)mvn test-compile。编译测试程序(会在当前目录下生成一个target,里边存放编译测试程序之后生成的字节码文件)mvn test测试( 会生成-一个目录surefire-reports,保存测试结果)mvn package。
  • ​ 打包主程序(会编译、编译测试、测试、并且按照pom.xml配置把主程序打包生成jar包或者war包)mvn install安装主程序(会把本工程打包,并且按照本工程的坐标保存到本地仓库中)mvn deploy 部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中。还会自动把项目部署到web容器中)。

2.6插件

maven执行命令时,真正完成功能的是插件,插件就是一些jar文件,一些类jar包

2.7坐标(gav)

坐标:唯一值,在互联网中唯一标识一个项目的

Maven把任何一个插件都作为仓库中的一个项目进行管理,用一组(三个)向量组成的坐标来表示。坐标在仓库中可以唯一定位一一个Maven项目。
groupld:组织名,通常是公司或组织域名倒序+项目名
artifactld:模块名,通常是工程名.
version:版本号
需要特别指出的是,项目在仓库中的位置是由坐标来决定的: groupld、 artifactld 和version决定项目在仓库中的路径,artifactld 和version决定jar包的名称。

<groupId>公司域名的倒写</groupId>
<artifactId>自定义项目名称</artifactId>
<version>自定义版本号</version>

2.8依赖(dependency)

一个Maven项目正常运行需要其它项目的支持,Maven会根据坐标自动到本地仓库中进行查找。对于程序员自己的Maven项目需要进行安装,才能保存到仓库中。

不用maven的时候所有的jar都不是你的,需要去各个地方下载拷贝,用了maven所有的jar包都是你的,想要谁,叫谁的名字就行。maven 帮你下载。

三、Maven在IDEA中的应用

在IDEA中设置maven,让idea和maven结合使用。

idea中内置了maven,一般不使用内置的maven,因为修改不配置不方便

使用自己安装的maven,需要覆盖idea中默认的设置。让idea知道maven安装位置等信息。

四、依赖管理

使用的是scope。值有:compile,test,provided。默认是compile

scope:表示依赖使用范围,也就是在maven构建项目的那些阶段中起作用。

五、Maven常用设置

5.1全局变量

自定义的属性

1.在<properties>通过自定义标签声明变量(标签名就是变量名)。

2.在pom.xml文件中的其他位置,使用$标签名使用变量的值。

自定义全局变量一般定义依赖的版本号,当你的项目中使用多个相同的版本号,先使用全局变量定义,再使用$变量名。

5.2属性设置

<properties>设置maven的常用属性

5.3资源插件

1.默认没有使用resources的时候,maven执行编译代码时,会把src/main/ resources目录中的文件拷贝到tarcet/classes目录中。对于src/main/java 目录下的非java文件不处理,不拷贝到target/classes目录中。

2.我们的程序有需要把一些文件放在src/main/java目录中,当我在执行java程序时,需要用到src/main/java目录中的文件。需要告诉maven在mvn compile src/main/java目录下的程序时,需要把文件一同拷贝到target/classes目录中。此时就需要在<bui1d>中加入<resources>

以上是关于Maven学习笔记总结的主要内容,如果未能解决你的问题,请参考以下文章

Maven笔记(更新中)

Maven学习笔记总结

Maven学习笔记总结

Java初转型-Maven入门

springmvc学习总结 -- maven+springmvc+spring+mybatis+mysql详细搭建整合过程讲解

Maven 学习