Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。Maven 曾是 Jakarta 项目的子项目,现为由 Apache 软件基金会主持的独立 Apache 项目。
通过 https://maven.apache.org/docs/history.html
查看 Required Java Version 对应的Maven版本,建议下载加粗的版本【此处选择3.6.3】
Java8以上的JDK版本使用Java7对应的Maven版本
在 https://archive.apache.org/dist/maven/maven-3/ 找到对应的版本
选择 binaries
source为源码包,需要的可以自行下载
根据系统选择下载
找到对应的目录进行解压(Linux或者MacOS一般把资源解压到 /usr/local,Windows可以把所有跟Java相关的放到某个磁盘的 OpenSource 目录下便于管理),解压即安装完成
Linux解压命令【tar -zxvf apache-maven-3.6.3-bin.tar.gz -C /usr/local】
Linux
vi /etc/profile
export M2_HOME=/usr/local/apache-maven-3.6.3
export M2=$M2_HOME/bin
export PATH=$M2:$PATH
Esc
:wq
source /etc/profile
MacOS
vi ~/.zshrc
export M2_HOME=/usr/local/apache-maven-3.6.3
export M2=$M2_HOME/bin
export PATH=$M2:$PATH
Esc
:wq
source ~/.zshrc
MacOS 如果终端类型是bash,把.zshrc改为.bash_profile
这里不再说明vi编辑器的使用方式,想要了解vi编辑器的同学可以看我另外一篇文章
https://blog.csdn.net/weixin_56878436/article/details/120026082
Windows
配置环境变量,MAVEN_HOME,指向 maven 的根目录;
配置环境变量 path,将 %MAVEN_HOME%\bin 追加到 path 中。
运行过 Maven 命令才会在你的用户目录生成一个 .m2 目录,该目录下有个目录名 repository,这个就是所谓的本地仓库,本地仓库的默认存放位置,可以先删除掉,主要存放是一些下载的 jar 文件。
如果没有运行过可以到/usr/local/apache-maven-3.6.3/conf/settings.xml拷贝到家目录/.m2
将settings.xml里面的文件内容改为以下内容
这里需要配置两个东西,忽略不配置也可以
你本地仓库的目录位置
使用默认即可),对于Windows来说默认家目录其实是C盘,大家都知道C盘是系统盘,都下载到C盘可能会导致系统盘太大影响电脑性能,建议改到OpenSource跟Java相关的文件夹中,例如:E:\Java\OpenSource\repository
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>你本地仓库的目录位置localRepository>
<mirrors>
<mirror>
<id>alimavenid>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<mirrorOf>centralmirrorOf>
mirror>
mirrors>
settings>
配置说明
Maven home path:Maven3.6.3对应下载的位置,一般不使用IDEA自带的Maven,因为IDEA内置的Maven可能存在问题,不然我们也不必大费周章去官网重新下载
User settings file:我们在配置第三步的时候在家目录的settings.xml文件中配置了阿里云镜像和本地仓库,因为IDEA默认去检查这个文件夹中的settings.xml文件,所以我们把settings.xml拷贝到家目录/.m2下,目的是为了不修改原来的settings文件,IDEA会优先读取家目录的settings.xml。当然也可以直接修改Maven中conf/settings.xml文件,并且把这个路径修改为Maven中conf/settings.xml,建议这种做法先对原本的settings.xml进行备份以免修改错误导致无法正常运行
Local repository:Windows在第三步的配置中修改了本地仓库下载路径,这里的配置让IDEA去这个路径找依赖,需要点击Override,修改为你下载本地仓库的路径,如:“E:/Java/OpenSource/repository”,让IDEA去“E:/Java/OpenSource/repository”路径下找依赖。如果没有修改本地仓库路径位置,这里无需修改
建议不打勾,不选择骨架,因为选不选择骨架创建的Maven项目都是残缺的,不是标准的Maven项目
如果需要选择骨架可以选择:maven-archetype-quickstart,如果选择了骨架第一次需要等待下载骨架,看网络速度大概10多到20分钟左右
用于填写项目信息,打包方式,添加依赖及插件等
我们需要在这个文件中添加依赖,比如说:我们加入一个 MySQL 的依赖
我们需要把依赖写在标签 dependencies
的 dependency
当中定义groupId,artifactId,version
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>org.examplegroupId>
<artifactId>demoartifactId>
<version>1.0-SNAPSHOTversion>
<properties>
<maven.compiler.source>8maven.compiler.source>
<maven.compiler.target>8maven.compiler.target>
properties>
<dependencies>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.21version>
dependency>
dependencies>
project>
对于IDEA 2020版来说,已经取消了自动导入所以我们添加完了以后需要点击按钮让他加载
- 他默认就会去我们的本地仓库进行查找,如果能找到,就直接使用
- 如果本地仓库没有找到,他就会去阿里云镜像中找到这个依赖进行下载到本地仓库
https://mvnrepository.com/
比如说我们想要找MySQL的依赖,直接搜索MySQL
找到对应的版本,点进去,直接拷贝内容到 pom.xml
文件中,然后刷新让他加载,如果本地仓库没有他就会去阿里云镜像下载
建议不打勾,不选择骨架,因为选不选择骨架创建的Maven项目都是残缺的,不是标准的Maven项目
如果需要选择骨架可以选择:maven-archetype-webapp,如果选择了骨架第一次需要等待下载骨架,看网络速度大概10多到20分钟左右
填写完信息后,点击 Finish
等待项目构建
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.1version>
<configuration>
<port>80port>
<path>/path>
<uriEncoding>UTF-8uriEncoding>
configuration>
plugin>
plugins>
build>
第一步:
第二步:查看有没有Web相关的,如果没有点击上方加号添加一个Web
第三步:
设置标记webapp为web根目录,爆红双击点击ok即可
点击添加 web.xml
注意添加位置,可以拷贝刚刚创建的地址
/Users/zhouxucong/Desktop/Java/JavaWebDemo/src/main/webapp 需要在后面加上/WEB-INF/web.xml
点击 ok
web项目的构建就完成了
如果大家觉得上面这种操作比较麻烦,可以手动创建
同样的方式创建一个package,名字叫WEB-INF
把下面配置拷贝到 web.xml 文件
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
web-app>
注意:使用这种方式包名和文件名字一定不能输错
数学中的坐标
在空间中,使用 X、Y、Z 三个向量可以唯一的定位空间中的任意一个点。
Maven 中的坐标
标识项目或者依赖在仓库中的位置。主要由下面构成:
groupId:项目名称,一般使用公司或组织域名倒写,域名具有唯一性,区分不同公司;
artifactId:项目中 Maven 项目/模块名称,区分同一个公司的项目;
version:项目版本,区分同一个项目不同时期的特点。
配置项目所要依赖的 jar,在 pom.xml 使用 dependency 元素配置,通过坐标先从本地仓库找,若没有再从远程仓库找。
scope
Maven 在编译,测试,运行的时候,各需要一套 classpath(比如编译的时候会有编译的 classpath,测试的时候会有测试的 classpath)。scope 表明该依赖的项目和三个 classpath 的关系,即表示依赖什么阶段起作用,什么阶段不起作用。
scope 主要可选值:
compile:默认,适用于所有阶段,会随着项目一起发布,在编译,测试,运行时都有效;
provided:编译和测试阶段使用;典型的如 servlet-api.jar,打包时不需要,容器来提供;
runtime:测试和运行阶段使用,用于接口和实现分离,典型的如 jdbc 具体驱动实现;
test:测试阶段使用,不会随项目发布,如 junit。
Maven 的依赖是具有传递性的,比如 A -> B,B -> C,那么 A 间接的依赖于 C,这就是依赖的传递性,其中 A 对于 B 是第一直接依赖,B 对于 C 是第二直接依赖,C 为 A 的传递性依赖。依赖的传递性可以解决依赖繁琐的问题。