前言
构建:编译代码,运行测试,打包,部署应用,运行服务器等; 依赖:在没有使用Maven之前,对于依赖(jar包)我们需要在各个平台各个地方进行jar包的下载,然后可能某些依赖(jar包)又会依赖其他的一个依赖(jar包),导致我们在初始构建项目时需要大量的时间去下载这些jar包导入项目中
一、Maven是什么?
Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。Maven 曾是 Jakarta 项目的子项目,现为由 Apache 软件基金会主持的独立 Apache 项目。
二、Maven 安装
1.检查 JDK 的版本
2.下载 Maven
通过 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为源码包,需要的可以自行下载 根据系统选择下载
3.安装 Maven
找到对应的目录进行解压(Linux或者MacOS一般把资源解压到 /usr/local,Windows可以把所有跟Java相关的放到某个磁盘的 OpenSource 目录下便于管理),解压即安装完成 Linux解压命令【tar -zxvf apache-maven-3.6.3-bin.tar.gz -C /usr/local】
4.配置环境变量
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 中。
5.验证 Maven 安装
在cmd或者终端输入:mvn -v
三、Maven 设置
1.本地仓库
运行过 Maven 命令才会在你的用户目录生成一个 .m2 目录,该目录下有个目录名 repository,这个就是所谓的本地仓库,本地仓库的默认存放位置,可以先删除掉,主要存放是一些下载的 jar 文件。 如果没有运行过可以到/usr/local/apache-maven-3.6.3/conf/settings.xml拷贝到家目录/.m2 将settings.xml里面的文件内容改为以下内容 这里需要配置两个东西,忽略不配置也可以
- 因为中央仓库是国外的,我们从中央仓库下载可能会比较慢,建议配置阿里仓库镜像
- 本地仓库地址,也就是我们的jar包会下载到的一个位置。因为默认是家目录,Linux和MacOS可以注释不配置(只有一个盘符下载到哪里都一样的,直接注释掉或者删掉
<localRepository>你本地仓库的目录位置</localRepository> 使用默认即可),对于Windows来说默认家目录其实是C盘,大家都知道C盘是系统盘,都下载到C盘可能会导致系统盘太大影响电脑性能,建议改到OpenSource跟Java相关的文件夹中,例如:<localRepository>E:\Java\OpenSource\repository</localRepository>
<?xml version="1.0" encoding="UTF-8"?>
<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>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>
四、IDEA 中 Maven 的配置
配置说明 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”路径下找依赖。如果没有修改本地仓库路径位置,这里无需修改
五、IDEA 中 构建 JavaSE 项目
1.创建项目
2.选择Maven
建议不打勾,不选择骨架,因为选不选择骨架创建的Maven项目都是残缺的,不是标准的Maven项目 如果需要选择骨架可以选择:maven-archetype-quickstart,如果选择了骨架第一次需要等待下载骨架,看网络速度大概10多到20分钟左右
3.填写对应内容
填写完信息后,点击 Finish 等待项目构建
4.pom.xml文件
用于填写项目信息,打包方式,添加依赖及插件等 我们需要在这个文件中添加依赖,比如说:我们加入一个 MySQL 的依赖 我们需要把依赖写在标签 dependencies 的 dependency 当中定义groupId,artifactId,version
<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
</dependencies>
</project>
对于IDEA 2020版来说,已经取消了自动导入所以我们添加完了以后需要点击按钮让他加载
- 他默认就会去我们的本地仓库进行查找,如果能找到,就直接使用
- 如果本地仓库没有找到,他就会去阿里云镜像中找到这个依赖进行下载到本地仓库
加载成功后,可以在标记的位置中查看到相关的依赖
5.依赖如何找呢?
https://mvnrepository.com/ 比如说我们想要找MySQL的依赖,直接搜索MySQL 找到对应的版本,点进去,直接拷贝内容到 pom.xml 文件中,然后刷新让他加载,如果本地仓库没有他就会去阿里云镜像下载
6.常用 Maven 命令
六、IDEA 中 构建 JavaWeb 项目
1.创建项目
2.选择Maven
建议不打勾,不选择骨架,因为选不选择骨架创建的Maven项目都是残缺的,不是标准的Maven项目 如果需要选择骨架可以选择:maven-archetype-webapp,如果选择了骨架第一次需要等待下载骨架,看网络速度大概10多到20分钟左右
3.填写对应内容
填写完信息后,点击 Finish 等待项目构建
4.pom.xml
添加 Tomcat 插件
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>80</port>
<path>/</path>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>
5.添加Web.xml文件
第一步: 第二步:查看有没有Web相关的,如果没有点击上方加号添加一个Web 第三步: 设置标记webapp为web根目录,爆红双击点击ok即可 点击添加 web.xml 注意添加位置,可以拷贝刚刚创建的地址 /Users/zhouxucong/Desktop/Java/JavaWebDemo/src/main/webapp 需要在后面加上/WEB-INF/web.xml 点击 ok web项目的构建就完成了
如果大家觉得上面这种操作比较麻烦,可以手动创建
-
在src.main下创建一个package,名字叫webapp -
同样的方式创建一个package,名字叫WEB-INF -
创建一个file,名字叫web.xml -
把下面配置拷贝到 web.xml 文件 <?xml version="1.0" encoding="UTF-8"?>
<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>
注意:使用这种方式包名和文件名字一定不能输错
基于Maven 构建的 JavaWeb 项目最终结构
七、概念解释
1.坐标
数学中的坐标 在空间中,使用 X、Y、Z 三个向量可以唯一的定位空间中的任意一个点。
Maven 中的坐标 标识项目或者依赖在仓库中的位置。主要由下面构成: groupId:项目名称,一般使用公司或组织域名倒写,域名具有唯一性,区分不同公司; artifactId:项目中 Maven 项目/模块名称,区分同一个公司的项目; version:项目版本,区分同一个项目不同时期的特点。
2.依赖
配置项目所要依赖的 jar,在 pom.xml 使用 dependency 元素配置,通过坐标先从本地仓库找,若没有再从远程仓库找。
scope Maven 在编译,测试,运行的时候,各需要一套 classpath(比如编译的时候会有编译的 classpath,测试的时候会有测试的 classpath)。scope 表明该依赖的项目和三个 classpath 的关系,即表示依赖什么阶段起作用,什么阶段不起作用。 scope 主要可选值: compile:默认,适用于所有阶段,会随着项目一起发布,在编译,测试,运行时都有效; provided:编译和测试阶段使用;典型的如 servlet-api.jar,打包时不需要,容器来提供; runtime:测试和运行阶段使用,用于接口和实现分离,典型的如 jdbc 具体驱动实现; test:测试阶段使用,不会随项目发布,如 junit。
3.传递性
Maven 的依赖是具有传递性的,比如 A -> B,B -> C,那么 A 间接的依赖于 C,这就是依赖的传递性,其中 A 对于 B 是第一直接依赖,B 对于 C 是第二直接依赖,C 为 A 的传递性依赖。依赖的传递性可以解决依赖繁琐的问题。
|