前言

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之快速入门相关推荐

  1. Maven+eclipse快速入门

    1.eclipse下载 在无外网情况下,无法通过eclipse自带的help-install new software输入url来获取maven插件,因此可以用集成了maven插件的免安装eclips ...

  2. Maven技术快速入门,高级java开发工程师的工作总结

    那Maven是如何帮我们进行项目资源管理的呢?这就需要用到Maven中的第二个东西:依赖管理.这也是它的第二个核心! 所谓依赖管理就是maven对项目所有依赖资源的一种管理,它和项目之间是一种双向关系 ...

  3. Spring MVC 4快速入门Maven原型已改进

    Spring Boot使Spring入门非常容易. 但是仍然有人对不使用Spring Boot并以更经典的方式引导应用程序感兴趣. 几年前,我创建了一个原型(早于Spring Boot),简化了引导S ...

  4. Maven快速入门(IDEA版) - 尚硅谷

    尚硅谷的Maven课程,自己学习时记录的笔记 b站视频:Maven零基础入门教程 文章目录 一.概述 (一) 为什么需要Maven 1. 目前的技术 2. 开发中存在的问题 (二) 什么是Maven? ...

  5. Shiro第一个程序:官方快速入门程序Qucickstart详解教程

    目录 一.下载解压 二.第一个Shiro程序 1. 导入依赖 2. 配置shiro配置文件 3. Quickstart.java 4. 启动测试 三.shiro.ini分析 四.Quickstart. ...

  6. Spring Boot 2 快速教程:WebFlux 快速入门(二)

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘 ...

  7. springcloud项目打包_SpringCloud 快速入门

    前言 最近入职了新公司,主要负责Java后端开发工作.目前正在开展一个全新的业务,技术选型为SpringCloud全家桶,项目的骨架由我负责搭建.由于前几家公司的微服务框架都是使用Dubbo + Sp ...

  8. Spring Boot 2.x基础教程:快速入门

    点击蓝色"程序猿DD"关注我哟 来源:http://t./ <Star最多的Spring Boot教程继续更新了> 牛皮吹过了! Git仓库和博客专题页也改版完成! 是 ...

  9. 【转】Spring Boot快速入门

    为什么80%的码农都做不了架构师?>>>    简介 在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复 ...

最新文章

  1. 刻意练习:LeetCode实战 -- Task07. 合并两个有序链表
  2. GAN 为什么需要如此多的噪声?
  3. 计算机加电后操作系统启动过程
  4. 【Android View绘制体系】invalidate
  5. sql server监控
  6. Windows Phone的网络连接策略
  7. 创建SVN 本地服务器
  8. 解决: VUE 项目中表单提交中文乱码、接口请求参数中文乱码
  9. 数据库热备之SQLServer的数据库镜像实施笔记
  10. coco 数据集_PyTorch版YOLOv4更新了,适用于自定义数据集
  11. 大型网站架构系列:负载均衡详解
  12. windows中的文件共享(SMB服务)
  13. 内核态的文件操作函数:filp_open、filp_close、vfs_read、vfs_write、set_fs、get_fs
  14. 怎样通俗易懂地解释内卷是什么意思?
  15. LDU暑假集训(十)1209 Problem I NEW RDSP MODE I
  16. 开启xmp1还是2_2020年11月2日大盘走势总结
  17. refseq数据库的特点_eureka如何剔除服务
  18. 女王大学 计算机专业,女王大学计算机科学专业本科.pdf
  19. 为什么你学过Java却忘光了——记第一次助教同学见面会,java开发面试笔试题
  20. QT鼠标点击窗口外的部分使窗口隐藏

热门文章

  1. 离差(全距,平均偏差,半内四分位数间距,10~90百分位数间距,标准差)
  2. 捡到的苹果手机怎么解id锁_苹果手机换id通讯录没了怎么恢复?超全教程,建议收藏!...
  3. 数字IC后端需要学习什么?需要具备哪些技能?
  4. 2021-09-29破解小米“铁蛋”,只需9999元,你也可以做一个四足机器人!
  5. 怎样一次性删掉word或wps文档里的空格行
  6. 2019年软件QA与测试八大关键词
  7. 大二暑期第四周学习总结
  8. php 合成图片、合成圆形图片
  9. 比特大陆新一轮裁员50%,回应称系人员调整
  10. 【RFC3449 网络路径不对称对 TCP 性能的影响】(翻译)