Maven之快速入门
前言
1.当我们要开发一个Java项目,为了保证编译通过,我们会到处去找jar包。当编译通过了,在运行的时候,却发现“ClassNotFoundException”,难道还差jar包吗?再去找找吧……
2.每个Java项目的目录结构都没有一个统一的标准,配置文件到处都是,单元测试代码到底应该放在哪里也没有一个权威的规范…..
但自从有了Maven,以上这一切都不再是问题了。Maven就是Java开发规范的“救世主”,它给我们带来了一种全新的项目构建方式,让我们的开发工作更加高效。
# 什么是Maven?
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven帮我们做的两件事情:
- 统一开发规范与工具;
- 统一管理jar包
# 安装Maven
Maven是Apache基金会的顶级项目,我们可以从http://maven.apache.org/(http://maven.apache.org/download.cgi)下载Maven开发包,其实就是一个压缩包,下载完毕后,解压一下再配置一下环境变量就可以用了。
假设我们刚刚下载了一个apache-maven-3.5.4-bin.tar.gz文件,现在将其解压到D:/tool目录下。我们将解压后的目录重命名为Maven,这样Maven的根目录就是D://tool/maven了。
这里有两个环境变量是需要配置的:
- M2_HOME = D://tool/maven
- MAVEN_OPTS = -Xmsl128m -Xmx512m
以上M2_HOME是必须要配置的,如果想让Maven跑得更快点,可以根据自己的情况来设置MAVEN_OPIS。此外,还需修改Path环境变量,在末尾添加%M2_HOME%\bin。
现在我们可以打开cmd(命令控制台),输入:
mvn -v
若出现上述的信息,那么恭喜Maven安装成功!
# Maven 仓库
使用Maven给我们带来的最直接的帮助就是jar包得到了统一管理,那么这些jar包存放在哪里呢?它们就在本地仓库中,位于C:\Users\11798目录下(当然也可以修改这个默认地址)。
实际上可将本地仓库理解为“缓存”,因为项目首先会从本地仓库中获取jar包,当无法获取指定jar包的时候,本地仓库会从远程仓库(或中央仓库)中下载jar包,并放入本地仓库中以备将来使用。这个远程仓库是Maven官方提供的,可通过http://search.maven.org来访问。
# 创建Maven 项目
创建一个Java Web项目只需在命令控制台(cmd)中输入:
mvn archetype:generate
执行该命令后Maven将下载Archetype插件及其所有的依赖插件,这些插件其实都是jar包,它们存放在Maven本地仓库中。在cmd中,我们会看到几百个Archetype(原型),可将它理解为项目模板,我们需要从中选择一个。我们的目标是创建Java Web项目,所有可以选择maven-archetype-webapp(可以在cmd中进行模糊搜索),随后Maven会与用户进行一些对话,Maven想知道以下信息:
- 项目Archetype Version(原型版本号)是什么 ——可选择1.0版本
- 项目groupId(组织名)是什么 —— 可输入qs.cjy
- 项目artifactId(构件名)是什么 —— 可输入JW-demo
- 项目version(版本号)是什么 —— 可输入1.0
- 项目pachage(包名)是什么 —— 可输入qs.cjy.demo
以上这种方式称为Interactive Mode(交互模式)
如果你是一位高效人士,或许觉得这样的交互过于繁琐,那么也可以尝试仅使用一条命名来完成同样的事情:
mvn archetype:generate -DinteractiveMode=false -DarchetypeArtifactId=
maven-archetype-webapp -DgroupId=qs.cjy -DartifactId =JW-demo -Dversion=1.0
以上这种方式称为Batch Mode(批处理模式)
当然,还有 第三种选择,使用IDE来创建Maven项目,可以使用Eclipse、NetBeans、IDEA来创建Maven项目。
构建完成后的目录结构如下:
但这样的目录结构不符合我们的编码环境要求,需要我们自己手动添加几个目录上去,最终的目录结构如下:
我们手工创建了三个目录:
- src/main/java
- src/test/java
- src/test/resources
- Java Web Maven目录作用:
- main 目录下是项目的主要代码,test目录下存放测试相关的代码。
- 编译输出后的代码会放在target目录下(该目录与src目录在同一级别下,这里没有显示出来)。
- pom.xml是Maven项目的配置文件,称为Project Object Model(项目对象模型),它用于描述整个Maven项目,所以也称为Maven 描述文件。
# POM结构
从上往下简要说明一下:
- modelVersion是POM的版本号,现在都是4.0.0的,必须得有,但不需要修改;
- groupId、artifactId、version分别表示Maven项目的组织名、构件名、版本号,它们三个合起来就是Maven的坐标,根据这个坐标可以在Maven仓库中对应唯一的Maven构件;
- packaging表示项目的打包方式,war表示打包为war文件,默认为jar,表示打包为jar包;
- name、url表示该项目的名称与URL地址,意义不大,可以省略;
- dependencies定义该项目的依赖关系,其中每一个dependency对应一个Maven项目,可见Maven坐标再次出现,还多了一个sccope,表示作用域;
- build表示与构建相关的配置,这里的finalName表示最终构建后的名称JW-demo.war。
如果用树形图来查看pom.xml文件,那么会更加清晰,如图所示:
除了项目的基本信息(Maven坐标、打包方式等)外,每个pom.xml都应该包括: - Lifecycle(生命周期)
- Plugins(插件)
- Dependencies(依赖)
Lifecycle是项目构建的生命周期,它包含9个阶段。
Maven是一个核心加上多个插件的架构,而这些插件提供了一系列非常重要的功能,这些插件会在许多阶段里发挥重要作用,如下表所述:
表中所出现的插件名称实际上是插件的别名(或称为前缀),比如compiler实际是org.apache.maven.plugins:maven-compiler-plugin:2.3.2,这个才是Maven插件的完全名称。
每个插件由包含了一些列的Goal(目标),以compiler为例,它包含以下目标: - compiler:help 用于显示compiler插件的使用帮助;
- compiler:compile 用于编译main目录下的Java代码;
- compiler:testCompile 用于编译test目录下的Java代码。
可见插件目标才是具体干活的“人”,一个插件包括了一个或多个目标,一个阶段可由零个或多个插件来提供支持。
我们可以在pom.xml中定义一些系列的项目依赖(构件包),每个构件包都会有一个Scope(作用域),它表示该构件在什么时候起作用,包括以下五种: - compile —— 默认作用域,在编译、测试、运行时有效;
- test —— 测试时有效;
- runtime —— 测试、运行时有效;
- provided —— 编写、测试有效,但在运行时无效;
- system —— 与provided类似,但依赖于系统资源。
以上内容可用一张矩阵表格来表示,如下表所示:
Maven之快速入门相关推荐
- Maven+eclipse快速入门
1.eclipse下载 在无外网情况下,无法通过eclipse自带的help-install new software输入url来获取maven插件,因此可以用集成了maven插件的免安装eclips ...
- Maven技术快速入门,高级java开发工程师的工作总结
那Maven是如何帮我们进行项目资源管理的呢?这就需要用到Maven中的第二个东西:依赖管理.这也是它的第二个核心! 所谓依赖管理就是maven对项目所有依赖资源的一种管理,它和项目之间是一种双向关系 ...
- Spring MVC 4快速入门Maven原型已改进
Spring Boot使Spring入门非常容易. 但是仍然有人对不使用Spring Boot并以更经典的方式引导应用程序感兴趣. 几年前,我创建了一个原型(早于Spring Boot),简化了引导S ...
- Maven快速入门(IDEA版) - 尚硅谷
尚硅谷的Maven课程,自己学习时记录的笔记 b站视频:Maven零基础入门教程 文章目录 一.概述 (一) 为什么需要Maven 1. 目前的技术 2. 开发中存在的问题 (二) 什么是Maven? ...
- Shiro第一个程序:官方快速入门程序Qucickstart详解教程
目录 一.下载解压 二.第一个Shiro程序 1. 导入依赖 2. 配置shiro配置文件 3. Quickstart.java 4. 启动测试 三.shiro.ini分析 四.Quickstart. ...
- Spring Boot 2 快速教程:WebFlux 快速入门(二)
2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘 ...
- springcloud项目打包_SpringCloud 快速入门
前言 最近入职了新公司,主要负责Java后端开发工作.目前正在开展一个全新的业务,技术选型为SpringCloud全家桶,项目的骨架由我负责搭建.由于前几家公司的微服务框架都是使用Dubbo + Sp ...
- Spring Boot 2.x基础教程:快速入门
点击蓝色"程序猿DD"关注我哟 来源:http://t./ <Star最多的Spring Boot教程继续更新了> 牛皮吹过了! Git仓库和博客专题页也改版完成! 是 ...
- 【转】Spring Boot快速入门
为什么80%的码农都做不了架构师?>>> 简介 在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复 ...
最新文章
- 刻意练习:LeetCode实战 -- Task07. 合并两个有序链表
- GAN 为什么需要如此多的噪声?
- 计算机加电后操作系统启动过程
- 【Android View绘制体系】invalidate
- sql server监控
- Windows Phone的网络连接策略
- 创建SVN 本地服务器
- 解决: VUE 项目中表单提交中文乱码、接口请求参数中文乱码
- 数据库热备之SQLServer的数据库镜像实施笔记
- coco 数据集_PyTorch版YOLOv4更新了,适用于自定义数据集
- 大型网站架构系列:负载均衡详解
- windows中的文件共享(SMB服务)
- 内核态的文件操作函数:filp_open、filp_close、vfs_read、vfs_write、set_fs、get_fs
- 怎样通俗易懂地解释内卷是什么意思?
- LDU暑假集训(十)1209 Problem I	NEW RDSP MODE I
- 开启xmp1还是2_2020年11月2日大盘走势总结
- refseq数据库的特点_eureka如何剔除服务
- 女王大学 计算机专业,女王大学计算机科学专业本科.pdf
- 为什么你学过Java却忘光了——记第一次助教同学见面会,java开发面试笔试题
- QT鼠标点击窗口外的部分使窗口隐藏
热门文章
- 离差(全距,平均偏差,半内四分位数间距,10~90百分位数间距,标准差)
- 捡到的苹果手机怎么解id锁_苹果手机换id通讯录没了怎么恢复?超全教程,建议收藏!...
- 数字IC后端需要学习什么?需要具备哪些技能?
- 2021-09-29破解小米“铁蛋”,只需9999元,你也可以做一个四足机器人!
- 怎样一次性删掉word或wps文档里的空格行
- 2019年软件QA与测试八大关键词
- 大二暑期第四周学习总结
- php 合成图片、合成圆形图片
- 比特大陆新一轮裁员50%,回应称系人员调整
- 【RFC3449 网络路径不对称对 TCP 性能的影响】(翻译)