【maven】maven基础知识总结
这里写目录标题
- 1._传统项目开发存在的问题
- 2._ Maven简介
- 3._Maven的核心概念
- 3.1._Maven工程约定目录结构
- 3.2_POM文件
- 3.3._ 仓库
- 3.3.1._ 仓库是什么
- 3.3.2._分类
- 3.3.3._ Maven对仓库的使用
- 3.4._ Maven的生命周期及相关命令
- 4._ 依赖作用范围
- 4.1._ 什么是依赖作用范围(Jar的生命周期)
- 4.2._ 如何设置
- 4.3._ 依赖作用范围详解
- 5._ 常见问题
1._传统项目开发存在的问题
- 一个项目做成一个工程,造成工程比较庞大,需要使用多模块来划分项目;
- 项目中需要的数量众多的Jar包,需要手动下载并引入,并且多个项目需要的Jar包存在重复的问题;
- 项目中需要的Jar包有版本兼容的问题, 需要手动解决;
- 项目中需要的War包又依赖其它的War包,需要手动解决。
为了解决上述问题,我们引入Maven(读音['meɪv(ə)n]或['mevn] )。
重点:maven比较全面的使用,idea中使用
2._ Maven简介
Maven是Apache软件基金会组织维护的一款自动化构建(build)工具,专注服务于Java平台的项目构建和依赖管理。Maven这个单词的本意是:专家,内行。
Maven是目前最流行的自动化构建工具,对于生产环境下多框架、多模块整合开发有重要作用, Maven 是一款在大型项目开发过程中不可或缺的重要工具 。
Maven的主要功能:
- Maven可以整合多个项目之间的引用关系, 我们可以根据业务和分层需要任意拆分一个项目 ;
- Maven提供规范的管理各个常用War包及其各个版本, 并且可以自动下载和引入项目中;
- Maven可以根据指定版本自动解决War包版本兼容问题;
- Maven可以把War包所依赖的其它War包自动下载并引入项目。
类似的构建工具还有:Ant、Gradle。
构建
,从开始到结束有多个步骤,涉及到多个环节的协同工作。
- 清理:删除以前的编译结果,为重新编译做好准备;
- 编译:将Java源程序编译为字节码文件;
- 测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性;
- 报告:在每一次测试后以标准的格式记录和展示测试结果;
- 打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java工程对应Jar包, Web工程对应war包;
- 安装:在Maven环境下特指将打包的结果(Jar包或war包)安装到本地仓库中;
- 部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行。
3._Maven的核心概念
3.1._Maven工程约定目录结构
demo(Maven工程的根目录,目录名可以自定义)
|-- pom.xml(Maven工程的核心配置文件)
|-- src(存放源码的目录)|-- main(主程序,简单来说就是我们写的非测试代码)| |-- java(主程序的Java代码)| |-- resources(主程序的配置文件,xml文件,properties文件等)|-- test(测试程序)|-- java(测试程序的Java代码)|-- resources(测试程序的配置文件,xml文件,properties文件等)
3.2_POM文件
Project Object Model
,项目对象模型。Maven把一个项目的结构和内容抽象成一个模型,在xml文件中进行声明,以方便进行构建和描述, pom.xml是Maven的灵魂。所以, Maven环境搭建好之后,所有的学习和操作都是关于pom.xml的。pom文件中的常用标签:
modelVersion
:Maven模型的版本,对于Maven2和Maven3来说,它只能是 4.0.0;groupId
:组织 id,一般是公司域名的倒写;artifactId
:项目名称,也是模块名称,对应groupId
中项目中的子项目;version
:项目的版本号;packaging
:项目打包的类型,可以使 jar、 war、 rar、 ear、 pom,默认是 Jar;dependencies和dependency
:Maven的一个重要作用就是管理Jar包,为了一个项目可以构建或运行,项目中不可避免的,会依赖很多其他的Jar包,在Maven中,这些Jar就被称为依赖,使用标签dependency来配置。 而这种依赖的配置正是通过坐标来定位的,由此我们也不难看出,Maven把所有的Jar包也都视为项目存在了;properties
:定义属性;build
:表示与构建相关的配置;parent
:在Maven中,如果多个模块都需要声明相同的配置,例如:groupId
、version
、有相同的依赖、或者相同的组件配置等, 也有类似Java的继承机制
,用parent声明要继承的父工程的 pom 配置;modules
:在Maven的多模块开发中,为了统一构建整个项目的所有模块,可以提供一 个额外的模块,该模块打包方式为pom,并且在其中使用modules聚合的其它模块,这样通过本模块就可以一键自动识别模块间的依赖关系来构建所有模块,叫Maven的聚合;groupId、artifactId、version
三个元素生成了一个Maven项目的基本坐标,在众多的Maven项目中可以唯一定位到某一个项目。坐标也决定着将来项目在仓库中的路径及名称。parent、modules
在多模块项目中使用,暂时可以不用了解。
3.3._ 仓库
3.3.1._ 仓库是什么
仓库是存放东西的,Maven中的仓库是用来存放Jar包的,Maven的仓库可以存放:
- Maven的插件,本质上也是一些Jar,这些Jar可以完成一定的功能;
- 自己开发的项目的模块,最终也可以打成Jar包放在仓库中;
- 第三方框架或工具的Jar包,比如:MySQL、Spring的Jar包。
3.3.2._分类
本地仓库,存在于当前电脑上,默认存放在
用户目录/.m2/repository
,为本机上所有的Maven工程服务,我们也可以通过Maven的配置文件conf/setting.xml
修改本地仓库所在的目录,在之前我们已经修改了本地仓库的位置。远程仓库,不在本机上,通过网路才能使用,多台电脑可以通过网络使用。分类:
- 中央仓库: 通过Internet访问,为全世界所有Maven工程服务;
- 中央仓库的镜像:架设在不同位置,欧洲,美洲,亚洲等每个洲都有若干的服务器,为中央仓库分担流量。减轻中央仓库的访问,下载的压力。所在洲的用户首先访问的是本洲的镜像服务器;
- 私服:在局域网环境中部署的服务器,为当前局域网范围内的所有Maven工程服务。 公司中常常使用这种方式。
在之前我们已经修改了远程仓库的配置,将远程仓库修改成了阿里云的镜像。
3.3.3._ Maven对仓库的使用
首先查找本地仓库—>私服(如果配置了私服)—>镜像仓库—>中央仓库
如果所有的仓库都没有,那么构建失败。
3.4._ 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 容器中)。
4._ 依赖作用范围
4.1._ 什么是依赖作用范围(Jar的生命周期)
Jar包生效的时间段,即Jar的生命周期
4.2._ 如何设置
在pom.xml中设置依赖时使用scope设置
<!-- MySQL驱动坐标 -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version><scope>runtime</scope>
</dependency>
<!-- servlet -->
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope>
</dependency>
<!-- jsp -->
<dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.3.3</version><scope>provided</scope>
</dependency>
4.3._ 依赖作用范围详解
compile
:为默认的依赖有效范围。如果在定义依赖关系的时候,没有明确指定依赖有效范围的话,则默认采用该依赖有效范围。此种依赖,在编译、运行、测试时均有效。
provided
:在编译、测试时有效,但是在运行时无效。provided意味着打包的时候可以不用包进去,别的设施(Web Container)会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。例如:servlet-api,运行项目时,容器已经提供,就不需要Maven重复地引入一遍了。
runtime
:在运行、测试时有效,但是在编译代码时无效。说实话在终端的项目(非开源,企业内部系统)中,和compile区别不是很大。例如:JDBC驱动实现,项目代码编译只需要JDK提供的JDBC接口,只有在测试或运行项目时才需要实现上述接口的具体JDBC驱动。
test
:只在测试时有效,包括测试代码的编译,执行。例如:Junit。
system
:在编译、测试时有效,但是在运行时无效。和provided的区别是,使用system范围的依赖时必须通过systemPath元素显式地指定依赖文件的路径。由于此类依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使用。
5._ 常见问题
Idea中Maven项目依赖出现红色波浪线。
原因:网络原因导致下载资源到一半没成功
如何解决:单击Idea Maven窗口上方的刷新按钮
如果还不能解决,可以在Windows下新建如下内容的
.bat
文件,运行,再单击刷新按钮。注意REPOSITORY_PATH的值。
set REPOSITORY_PATH=本地仓库的绝对路径
rem 正在搜索...
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do (del /s /q %%i
)
rem 搜索完毕
pause
【maven】maven基础知识总结相关推荐
- maven(一) 基础知识
文章目录 1. maven介绍 2. maven生命周期 3. snapshot版本和release版本的区别 4. maven仓库 5. plugin插件 6.maven命令 7. 继承和聚合 1. ...
- Maven (1)---maven 基础知识
Maven 学习 Maven 翻译为"专家"."内行",是 Apache 下的一个纯 Java 开发的开源项目.基于项目对象模型(缩写:POM)概念,Maven ...
- 后端技术:Maven 最全知识总结,值得收藏!
来源:cnblogs.com/hzg110/p/6936101.html 一.为什么使用Maven这样的构建工具[why] 二.maven是什么[what] 三.安装maven 四.第一个maven ...
- maven项目基础配置——pop.xml
maven项目基础配置--pop.xml 初学,如有不正确的地方,希望多多指正 1.基本信息配置 <?xml version="1.0" encoding="UTF ...
- java培训基础知识都学哪些
很多人都开始学习java技术,觉得java语言在未来的发展前景空间非常大,事实却是如此,那么针对于零基础的同学, 学习java技术需要学哪些呢?下面我们就来看看java培训基础知识都学哪些? java ...
- java 网络爬虫 正则表达式_【干货】Java网络爬虫基础知识
原标题:[干货]Java网络爬虫基础知识 引言 Java 网络爬虫具有很好的扩展性可伸缩性,其是目前搜索引擎开发的重要组成部分.例如,著名的网络爬虫工具 Nutch 便是采用 Java 开发,该工具以 ...
- crawler4j_迷你搜索引擎–使用Neo4j,Crawler4j,Graphstream和Encog的基础知识
crawler4j 继续执行正在实现搜索引擎的Programming Collection Intelligence (PCI)的第4章. 我可能比做一次运动所咬的东西要多. 我认为,与其使用本书中所 ...
- 迷你搜索引擎–使用Neo4j,Crawler4j,Graphstream和Encog的基础知识
继续执行正在实现搜索引擎的Programming Collection Intelligence (PCI)的第4章. 我可能比做一次运动所咬的东西要多. 我认为, 与其一直使用本书中使用的普通关系数 ...
- mvc试图 下拉框不重复_面试前不巩固一下基础知识、刷刷题吗?
其实面试就像一场相亲,在你心动人的面前,肯定要展示自己最好的一面,无论是穿着还是言行举止.作为一个软件开发工程师,看过很多公司的面试题,也参与过很多公司的面试,也给不少人新人面过时不试,虽说我现在并没 ...
- 大数据?这些你了解吗?------之基础知识篇
下面介绍的这些是在Linux环境下学习大数据所必须要掌握的基础知识: 1.导入虚拟机 =>解压=>英文目录下=>导入VMware中[已移动]=>超级管理员用户root/123 ...
最新文章
- 基于YOLO的目标检测界面化部署实现(支持yolov1-yolov5、yolop、yolox)
- 戈登贝尔奖获得者张林峰:当AI遇上物理模型,会有怎样的质变? | 智源专访...
- CCNet 的 Build 流程
- 皮一皮:这才是「真 · 老司机」...
- 一次分表踩坑实践的探讨
- Gompertz模型绘图 matlab,Logistic模型matlab求解
- linux下载pycharm_django开发-使用pycharm进行远程开发
- Docker教程(二) Docker环境安装
- [pandas]方法总结
- CentOS7系统服务管理systemctl
- Redis3集群搭建
- 并发编程(十四)—— ScheduledThreadPoolExecutor 实现原理与源码深度解析 之DelayWorkQueue...
- python 实现两个excel表格数据的对比
- [jquery] 动画 show hide toggle,下拉显示---slideDown,淡入淡出----fadeIn, animate() ,停止动画---stop,finish
- 2021华为杯D题第一题完整代码
- [转贴]民国记者有多牛:揭黑损人骂街是常事
- 听书类APP消息功能竞品分析
- Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operat
- CVPR2021 行人重识别/Person Re-identification 论文+开源代码汇总
- java 生成dump_Java生成堆内存dump