本笔记为本人在B站学习时整理而成,为了更好的学习,将其整理成笔记,以防忘记相关知识点。
Maven简介
软件是一个工程
我们在日常生活常能听到工程这个词,像桥梁工程、道路工程、南水北调工程等等。
工程说简单点就是各个行业的从业人员通过总结规律或者方法,以最短的时间和人力、物力来做出高效可靠的东西。
我们也就能理解桥梁工程,其实就是人们通过经验的总结和各种研究得出来的、用来修建桥梁时所采用的高效的方法,当然这种方法是可复用的。
我们将这种作工程的思想应用到软件上,于是就产生了—软件工程。
软件工程:
为了能够实现软件的流水线式生产,在设计和构建软件时能够有一种规范和工程化的方法,人们便提出了软件工程概念。
软件开发需要编译代码—>开发人员自己测试代码—>把代码打包—>部署项目到测试服务器—>测试人员测试
功能—>测试测试出 bug 。
开发人员需要修改bug—>开发人员自己测试代码—>把代码打包—>部署项目到测试服务器—>测试人员测试功
能—>直到符合功能要求。
上述过程需要重复多次,大型项目中构建项目比较复杂,有很多的配置文件,jar 文件,多个子项目等等。
都用人力完成费时费力,效率比较低。maven 可以让我们从上面的工作中解脱出来。
maven 是自动化构建工具。
传统开发项目的问题,没有使用maven管理的项目
1)很多模块,模块之间有关系, 手工管理关系,比较繁琐。
2)需要很多第三方功能, 需要很多jar文件,需要手工从网络中获取各个jar。
3)需要管理jar的版本, 你需要的是mysql.5.1.5.jar,那你不能给一个mysql.4.0.jar。
4)管理jar文件之间的依赖, 你的项目要使用a.jar,需要使用b.jar里面的类,那么必须首先获取到b.jar才可以, 然后才能使用a.jar。
Maven 概述
Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和依赖管理。
Maven 这个单词的本意是:专家,内行。读音是[‘meɪv(ə)n]或[‘mevn]。
Maven 是目前最流行的自动化构建工具,对于生产环境下多框架、多模块整合开发有重要作用,Maven 是一款在大型项目开发过程中不可或缺的重要工具。
Maven 可以整合多个项目之间的引用关系,我们可以根据业务和分层需要任意拆分一个项目;
Maven 提供规范的管理各个常用 jar 包及其各个版本,并且可以自动下载和引入项目中;
Maven 可以根据指定版本自动解决 jar 包版本兼容问题;
Maven 可以把 jar 包所依赖的其它 jar 包自动下载并引入项目。
类似自动化构建工具还有:Ant, Maven, Gradle。
构建过程中的各个环节:清理、编译、测试、报告、打包、安装、部署。
需要改进项目的开发和管理,需要maven
1)maven可以管理jar文件
2)自动下载jar和他的文档,源代码
3)管理jar直接的依赖, a.jar需要b.jar , maven会自动下载b.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)部署
, 把程序安装好可以执行。
Maven核心概念
用好maven,了解这些概念。
(1)POM
:一个文件,名称是pom.xml
, pom翻译过来叫做项目对象模型
。
maven把一个项目当做一个模型使用。控制maven构建项目的过程,管理jar依赖。
(2)约定的目录结构
: maven项目的目录和文件的位置都是规定的。
(3)坐标
: 是一个唯一的字符串,用来表示资源的。
(4)依赖管理
:管理你的项目可以使用jar文件。
(5)仓库管理
(了解):你的资源存放的位置。
(6)生命周期
(了解) : maven工具构建项目的过程,就是生命周期。
(7)插件和目标
(了解):执行maven构建的时候用的工具是插件。
(8)继承
(9)聚合
安装 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.5.4
或者 M2_HOME=d:/apache-maven-3.5.4
path=%MAVEN_HOME%/bin;
或者%M2_HOME%/bin;
4、验证是否安装成功:
mvn –v
5、出现如下内容,maven安装配置正确。
1 | C:\Users\Administrator>mvn -v |
Maven的核心概念
Maven工程约定的目录结构
约定是大家都遵循的一个规则。
1 | Hello/ |
一般情况下,我们习惯上采取的措施是:约定>配置>编码
。
maven 的 pom.xml 记录的关于构建项目的各个方面的设置,maven 从 pom.xml 文件开始,按照助约定的工程目录编译,测试,打包,部署,发布项目。
POM文件
即 Project Object Model 项目对象模型。Maven 把一个项目的结构和内容抽象成一个模型,
在 xml 文件中进行声明,以方便进行构建和描述,pom.xml 是 Maven 的灵魂。
所以,maven 环境搭建好之后,所有的学习和操作都是关于 pom.xml 的。
1)坐标
:唯一值, 在互联网中唯一标识一个项目的
1 | <groupId>公司域名的倒写</groupId> |
https://mvnrepository.com/ 是搜索使用的中央仓库
, 使用groupId 或者 artifactId作为搜索条件。
2) packaging
: 打包后压缩文件的扩展名,默认是jar ,web应用是war ,packaging 可以不写, 默认是jar
3)依赖
:dependencies 和dependency ,相当于是 java代码中import
你的项目中要使用的各种资源说明, 比我的项目要使用mysql驱动,可以这样配置:
1 | <dependencies> |
4)properties
:设置属性
5)build
: maven在进行项目的构建时, 配置信息,例如指定编译java代码使用的jdk的版本等
仓库
maven管理项目会去下载项目运行需要的东西。
1)为什么要下载
maven工具执行的操作需要很多插件(java类–jar文件)完成的
2)下载什么东西了
jar文件–叫做插件–插件是完成某些功能
3)下载的东西存放到哪里了
默认仓库(本机仓库):C:\Users\(登录操作系统的用户名)Administrator\.m2\repository
中央仓库的地址 : https://repo.maven.apache.org
设置本机存放资源的目录位置(设置本机仓库):
(1)修改maven的配置文件, maven安装目录/conf/settings.xml
,先备份 settings.xml
(2) 修改 localRepository
指定你的目录(不要使用中文目录
)
例如:D:\work\maven_work\maven_repository
1)仓库是什么
: 仓库是存放东西的, 存放maven使用的jar 和 我们项目使用的jar
maven使用的插件(各种jar)
我项目使用的jar(第三方的工具)
2)仓库的分类
本地仓库, 就是你的个人计算机上的文件夹,存放各种jar
远程仓库, 在互联网上的,使用网络才能使用的仓库
①:中央仓库,最权威的, 所有的开发人员都共享使用的一个集中的仓库。
②:中央仓库的镜像:就是中央仓库的备份, 在各大洲,重要的城市都有镜像。
③:私服,在公司内部,在局域网中使用的, 不是对外使用的。
3)仓库的使用,maven仓库的使用不需要人为参与。
开发人员需要使用mysql驱动--->maven首先查本地仓库--->私服--->镜像--->中央仓库
单元测试的使用
用的是junit, junit是一个专门测试的框架(工具)。
junit测试的内容: 测试的是类中的方法, 每一个方法都是独立测试的。
方法是测试的基本单位(单元)。
maven借助单元测试,批量的测试你类中的大量方法是否符合预期的。
使用步骤
(1)加入依赖,在pom.xml加入单元测试依赖
1 | <!-- 单元测试 --> |
(2)在maven项目中的src/test/java目录下,创建测试程序
推荐的创建类和方法的提示:
1.测试类的名称是:Test + 你要测试的类名
2.测试的方法名称是:Test + 方法名称
例如你要测试HelloMaven ,创建测试类 TestHelloMaven,创建测试方法,例如:
1 |
|
其中testAdd叫做测试方法,它的定义规则:
1.方法是public的,必须的
2.方法没有返回值, 必须的
3.方法名称是自定义的,推荐是Test + 方法名称
4.在方法的上面加入 @Test
mvn compile(重要,要记住)
编译main/java/目录下的 java 为class文件
同时把class拷贝到 target/classes目录下面
把main/resources目录下的所有文件都拷贝到target/classes目录下
maven在idea中使用
在idea中设置maven ,让idea和maven结合使用。
idea中内置了maven ,一般不使用内置的, 因为用内置修改maven的设置不方便。
使用自己安装的maven, 需要覆盖idea中的默认的设置。让idea指定maven安装位置等信息。
配置的入口
:
①:配置当前工程的设置, File
—Settings
—Build, Excution,Deployment
—Build Tools
—Maven
:
Maven Home directory
:maven的安装目录User Settings File
:就是maven安装目录conf/setting.xml配置文件Local Repository
:本机仓库的目录位置
File
—Settings
—Build, Excution,Deployment
—Build Tools
—Maven
—Runner
:
这里是配置生成maven的骨架时用的:
VM Options
:-DarchetypeCatalog=internal
JRE
: 你项目的jdk
maven项目创建时,会联网下载模版文件,比较大, 使用-DarchetypeCatalog=internal
,不用下载, 创建maven项目速度快。
②:配置以后新建工程的设置, File
—Other settings
—Settings for New Project
,按照①中的配置。
使用模版创建项目
1)maven-archetype-quickstart :普通的java项目
2)maven-archetype-webapp :web工程
打包
web项目直接打成war包后(idea右侧maven–> Lifecycle–>package),在target文件夹下可以看到打好的war包。
放到tomcat的webapps文件夹下面,改个名字,然后启动tomcat,访问就行了。
依赖管理
依赖范围
依赖的范围:compile、test、provided,默认采用 compile。
compile | test | provided | |
---|---|---|---|
对主程序是否有效 | 是 | 否 | 是 |
对测试程序是否有效 | 是 | 是 | 是 |
是否参与打包 | 是 | 否 | 否 |
是否参与部署 | 是 | 否 | 否 |
依赖范围, 使用scope表示的。
scope:表示依赖使用的范围,也就是在maven构建项目的哪些阶段中起作用。
maven构建项目 :编译
, 测试
,打包
, 安装
,部署过程
(阶段)
你在写项目的中的用到的所有依赖(jar ) ,必须在本地仓库中有。
没有必须通过maven下载, 包括provided的都必须下载。
你在servlet需要继承HttpServlet( provided) , 你使用的HttpServlet是maven仓库中的。
当你的写好的程序, 放到tomcat服务器中运行时, 此时你的程序中应该不包含servlet、jsp的jar,
因为tomcat提供了servlet和jsp的jar,scope应该设置成provided。
Maven 常用设置
maven的属性设置 properties
properties 标签
中设置maven的常用属性
1 | <properties> |
maven的全局变量
自定义的属性
(1)在properties标签
中通过自定义标签声明变量(标签名就是变量名),标签中间写上值
1 | <properties> |
(2)在pom.xml文件中的其它位置,使用${标签名} 使用变量的值
1 | <dependency> |
资源插件
1 | <build> |
作用: mybatis课程中会用到这个作用。(mapper文件放在了dao包中)
(1)默认没有使用资源插件的时候, maven执行编译代码时,会把src/main/resources目录中的文件拷贝到target/classes目录中。
对于src/main/java目录下非java文件,不处理,不拷贝到target/classes目录中。
(2)我们的程序有需要把一些文件放在src/main/java目录中,当我在执行java程序时,需要用到src/main/java目录中的文件,
需要告诉maven在mvn compile
src/main/java目录下的程序时,需要把文件一同拷贝到target/classes目录中。
此时就需要在build标签中中加入如上的资源插件。
多模块
自己去百度学习,找对应的进阶视频!
发布时间: 2020-07-23
最后更新: 2023-01-27
本文标题: maven学习笔记
本文链接: https://blog-yilia.xiaojingge.com/posts/90a19bca.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!
