- Maven 简介
- 为什么使用
- 安装与配置
- Maven 仓库
- Maven 基本项目结构
- 常见命令
- IEDA 配置 Maven
- 创建 Maven 项目
- 引入依赖
- scope的依赖范围
Maven是项目管理的工具,可以管理构建很多类型的项目,如 C#,Ruby 等
Maven可以对Java项目进行一键构建,依赖管理
这里对Maven管理Java项目进行阐述
- jar包随着开发会原来越多,出现各种版本冲突,难以管理,并且开发时候工程文件因为jar的逐渐导入非常的大
- 假如没有集成开发工具,开发代码后运行,需要我们一个一个的编译
- 单元测试需要一个一个测试
- 开发完毕后,需要自己整合打包项目
- 项目开发结构随意,每个人开发的目录结构与含义都不同
- ……
结论:综上,项目交给Maven管理,帮我们做上边的事情
安装与配置下载
https://maven.apache.org/download.cgi
Maven 3.8.6
下载后解压缩到你要安装到的目录,不用进行安装操作,只需配置即可
结构
bin:存放了 maven 的命令,比如 mvn clean
boot:存放了一些 maven 本身的引导程序,如类加载器等
conf:存放了 maven 的一些配置文件,如 setting.xml 文件
lib:存放了 maven 本身运行所需的一些 jar 包
注意:至此我们的 maven 软件就可以使用了,前提是你的电脑上之前已经安装并配置好了 JDK。
配置
在环境变量中,系统变量添加
变量名=MAVEN_HOME 变量值=E:Maven解压缩后的路径apache-maven-3.8.6
进入Path系统变量新建一条
E:codeappapache-maven-3.8.6-binapache-maven-3.8.6bin
注意:这里可以更改为%MAVEN_HOME%bin,也可以写全路径
测试
打开cmd输入mvn -v
出现Apache Maven 3.8.6……就成功了
接下来设置仓库
Maven 仓库Maven的工作需要从仓库下载一些 jar 包,仓库分为本地仓库,远程仓库(也叫私服),中央仓库。本地仓库就是本地文件夹,当第二次需要此 jar 包时则不再从远程仓库下载
-
本地仓库:用来存储从远程仓库或中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包,优先从本地仓库查找 默认本地仓库位置在windows 用户目录/.m2/repository
-
远程仓库:如果本地需要插件或者 jar 包,本地仓库没有,默认去远程仓库下载。
远程仓库可以在互联网内也可以在局域网内。 -
中央仓库
http://repo1.maven.org/maven2
在美国,下载jar的时候有时候会有网络问题
配置
配置本地仓库的位置
更改默认的c盘仓库的位置,打开Maven目录下的conf下的settings.xml
找到图片的位置,新增
E:codeappapache-maven-3.8.6-binapache-maven-3.8.6repo
新建一个repo文件夹,这里的repo就是本地仓库的文件夹名称,可以随意设置,我把它放在了Maven目录下
配置中央仓库的镜像(下载jar包更加迅速)
配置阿里云的仓库
注意:3.8.6的版本增加了安全性,当远程仓库的协议不是https就会报错,为了方便依然在使用http协议的远程仓库,需要注释掉默认的配置
项目名 -- src --main : 项目源码处 --java : java源代码 --resources : 项目的配置文件 --webapp :web的资源根 --test : 单元测试处 --java :单元测试的java类 --resources :单元测试需要的配置文件常见命令
mvn archetype:generate 是Maven工程采用自带的模板创建项目的命令
mvn compile 是 Maven 工程的编译命令
mvn clean 执行 clean 会删除 target 目录及内容
mvn test 是 Maven 工程的测试命令,执行 src/test/java 下单元测试类
mvn package 是 maven 工程的打包命令,可以打包为war和jar格式
mvn install 是 maven 工程的安装命令,执行 install 将 maven 打成 jar 包或 war 包发布到本地仓库,当执行该操作时,默认前边的操作都会执行
打开新项目的设置
找到Maven设置
- 设置Maven主程序路径
- 配置文件路径
- 本地仓库路径
在中央仓库搜索需要的依赖复制地址放入pom.xml下的
scope的依赖范围junit junit 4.13.1 test
compile:在编译、测试、运行时有效
runtime:在测试和运行时有效
provided:在编译、测试时有效,在运行时不需要
test:在测试时有效,在编译、运行时不需要
system:在编译和测试时有效,在运行时不需要,不推荐使用该范围的依赖



