1.什么是Maven?
maven是一款用于管理和构建java项目的工具
2.Maven的作用?
1.依赖管理:方便快捷的管理项目以来的资源(jar包),避免版本冲突问题。
以前的项目需要创建lib包,将网上的jar包资源放入其中使用,但是开发后期太过繁琐并且可能出现版本冲突问题
2.统一项目结构:提供标准,统一的项目结构。
因为不同编译器创建出来的项目会有不同,eclipse创建出来的项目在idea中无法直接使用。而使用maven会提供一套都能够使用的统一项目结构
3.项目构建:标准跨平台的自动化项目构建工具。
可以通过一些maven指令快速进行项目的清理,编译,测试,打包,发布的操作
Maven的介绍:
maven是一款项目管理和构建工具,它及用户项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建。
官网:Maven – Welcome to Apache Maven
作用:
1.方便的依赖管理
2.统一的项目结构
3.标准的项目构建流程
maven的pom.xml文件中:
maven坐标:groupId组织名,artifactId当前模块名称,version版本
maven仓库;
用于存储资源,管理各种jar包
本地仓库:自己计算机上的一个目录
中央仓库:maven团队维护的全球唯一仓库
远程仓库:公司团队搭建的私有仓库
Maven的安装:
在官网Maven – Welcome to Apache Maven中下载新版的maven并且解压到英文目录下。
在conf/setting.xml中添加
<localRepository>D:\download\apache-maven-3.9.9-bin\apache-maven-3.9.9\mvn_repo</localRepository>
和添加
<mirrors>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
然后配置环境变量:MAVEN_HOME,在环境变量中添加
并且添加Path
在idea中打开setting/Build,Execution,Deployment/Build Tools/Maven下进行maven的配置即可使用。
相关面试题:
1.什么是Maven
maven是一款用于管理和构建java项目的工具
2.什么是 POM?
每一个 Maven 工程都有一个 pom.xml
文件,位于根目录中,包含项目构建生命周期的详细信息。通过 pom.xml
文件,我们可以定义项目的坐标、项目依赖、项目信息、插件信息等等配置。
3.Maven 的主要作用有哪些?
- 项目构建:提供标准的、跨平台的自动化项目构建方式。
- 依赖管理:方便快捷的管理项目依赖的资源(jar 包),避免资源间的版本冲突问题。
- 统一开发结构:提供标准的、统一的项目结构。
4.maven坐标:
项目中依赖的第三方库以及插件可统称为构件。每一个构件都可以使用 Maven 坐标唯一标识,坐标元素包括:
- groupId(必须): 定义了当前 Maven 项目隶属的组织或公司。groupId 一般分为多段,通常情况下,第一段为域,第二段为公司名称。域又分为 org、com、cn 等,其中 org 为非营利组织,com 为商业组织,cn 表示中国。以 apache 开源社区的 tomcat 项目为例,这个项目的 groupId 是 org.apache,它的域是 org(因为 tomcat 是非营利项目),公司名称是 apache,artifactId 是 tomcat。
- artifactId(必须):定义了当前 Maven 项目的名称,项目的唯一的标识符,对应项目根目录的名称。
- version(必须):定义了 Maven 项目当前所处版本。
- packaging(可选):定义了 Maven 项目的打包方式(比如 jar,war...),默认使用 jar。
- classifier(可选):常用于区分从同一 POM 构建的具有不同内容的构件,可以是任意的字符串,附加在版本号之后。
如果使用 Maven 构建产生的构件(例如 Jar 文件)被其他的项目引用,那么该构件就是其他项目的依赖。
<project>
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<type>...</type>
<scope>...</scope>
<optional>...</optional>
<exclusions>
<exclusion>
<groupId>...</groupId>
<artifactId>...</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
配置说明:
- dependencies:一个 pom.xml 文件中只能存在一个这样的标签,是用来管理依赖的总标签。
- dependency:包含在 dependencies 标签中,可以有多个,每一个表示项目的一个依赖。
- groupId,artifactId,version(必要):依赖的基本坐标,对于任何一个依赖来说,基本坐标是最重要的,Maven 根据坐标才能找到需要的依赖。我们在上面解释过这些元素的具体意思,这里就不重复提了。
- type(可选):依赖的类型,对应于项目坐标定义的 packaging。大部分情况下,该元素不必声明,其默认值是 jar。
- scope(可选):依赖的范围,默认值是 compile。
- optional(可选):标记依赖是否可选
- exclusions(可选):用来排除传递性依赖,例如 jar 包冲突
依赖范围
classpath 用于指定 .class
文件存放的位置,类加载器会从该路径中加载所需的 .class
文件到内存中。
Maven 在编译、执行测试、实际运行有着三套不同的 classpath:
- 编译 classpath:编译主代码有效
- 测试 classpath:编译、运行测试代码有效
- 运行 classpath:项目运行时有效
Maven 的依赖范围如下:
- compile:编译依赖范围(默认),使用此依赖范围对于编译、测试、运行三种都有效,即在编译、测试和运行的时候都要使用该依赖 Jar 包。
- test:测试依赖范围,从字面意思就可以知道此依赖范围只能用于测试,而在编译和运行项目时无法使用此类依赖,典型的是 JUnit,它只用于编译测试代码和运行测试代码的时候才需要。
- provided:此依赖范围,对于编译和测试有效,而对运行时无效。比如
servlet-api.jar
在 Tomcat 中已经提供了,我们只需要的是编译期提供而已。 - runtime:运行时依赖范围,对于测试和运行有效,但是在编译主代码时无效,典型的就是 JDBC 驱动实现。
- system:系统依赖范围,使用 system 范围的依赖时必须通过 systemPath 元素显示地指定依赖文件的路径,不依赖 Maven 仓库解析,所以可能会造成建构的不可移植。
依赖范围
classpath 用于指定 .class
文件存放的位置,类加载器会从该路径中加载所需的 .class
文件到内存中。
Maven 在编译、执行测试、实际运行有着三套不同的 classpath:
- 编译 classpath:编译主代码有效
- 测试 classpath:编译、运行测试代码有效
- 运行 classpath:项目运行时有效
Maven 的依赖范围如下:
- compile:编译依赖范围(默认),使用此依赖范围对于编译、测试、运行三种都有效,即在编译、测试和运行的时候都要使用该依赖 Jar 包。
- test:测试依赖范围,从字面意思就可以知道此依赖范围只能用于测试,而在编译和运行项目时无法使用此类依赖,典型的是 JUnit,它只用于编译测试代码和运行测试代码的时候才需要。
- provided:此依赖范围,对于编译和测试有效,而对运行时无效。比如
servlet-api.jar
在 Tomcat 中已经提供了,我们只需要的是编译期提供而已。 - runtime:运行时依赖范围,对于测试和运行有效,但是在编译主代码时无效,典型的就是 JDBC 驱动实现。
- system:系统依赖范围,使用 system 范围的依赖时必须通过 systemPath 元素显示地指定依赖文件的路径,不依赖 Maven 仓库解析,所以可能会造成建构的不可移植。
依赖范围
classpath 用于指定 .class
文件存放的位置,类加载器会从该路径中加载所需的 .class
文件到内存中。
Maven 在编译、执行测试、实际运行有着三套不同的 classpath:
- 编译 classpath:编译主代码有效
- 测试 classpath:编译、运行测试代码有效
- 运行 classpath:项目运行时有效
Maven 的依赖范围如下:
- compile:编译依赖范围(默认),使用此依赖范围对于编译、测试、运行三种都有效,即在编译、测试和运行的时候都要使用该依赖 Jar 包。
- test:测试依赖范围,从字面意思就可以知道此依赖范围只能用于测试,而在编译和运行项目时无法使用此类依赖,典型的是 JUnit,它只用于编译测试代码和运行测试代码的时候才需要。
- provided:此依赖范围,对于编译和测试有效,而对运行时无效。比如
servlet-api.jar
在 Tomcat 中已经提供了,我们只需要的是编译期提供而已。 - runtime:运行时依赖范围,对于测试和运行有效,但是在编译主代码时无效,典型的就是 JDBC 驱动实现。
- system:系统依赖范围,使用 system 范围的依赖时必须通过 systemPath 元素显示地指定依赖文件的路径,不依赖 Maven 仓库解析,所以可能会造成建构的不可移植。
依赖范围
classpath 用于指定 .class
文件存放的位置,类加载器会从该路径中加载所需的 .class
文件到内存中。
Maven 在编译、执行测试、实际运行有着三套不同的 classpath:
- 编译 classpath:编译主代码有效
- 测试 classpath:编译、运行测试代码有效
- 运行 classpath:项目运行时有效
Maven 的依赖范围如下:
Maven 的依赖范围如下:
- compile:编译依赖范围(默认),使用此依赖范围对于编译、测试、运行三种都有效,即在编译、测试和运行的时候都要使用该依赖 Jar 包。
- test:测试依赖范围,从字面意思就可以知道此依赖范围只能用于测试,而在编译和运行项目时无法使用此类依赖,典型的是 JUnit,它只用于编译测试代码和运行测试代码的时候才需要。
- provided:此依赖范围,对于编译和测试有效,而对运行时无效。比如
servlet-api.jar
在 Tomcat 中已经提供了,我们只需要的是编译期提供而已。 - runtime:运行时依赖范围,对于测试和运行有效,但是在编译主代码时无效,典型的就是 JDBC 驱动实现。
- system:系统依赖范围,使用 system 范围的依赖时必须通过 systemPath 元素显示地指定依赖文件的路径,不依赖 Maven 仓库解析,所以可能会造成建构的不可移植。
-
依赖范围
classpath 用于指定
.class
文件存放的位置,类加载器会从该路径中加载所需的.class
文件到内存中。Maven 在编译、执行测试、实际运行有着三套不同的 classpath:
- 编译 classpath:编译主代码有效
- 测试 classpath:编译、运行测试代码有效
- 运行 classpath:项目运行时有效
- compile:编译依赖范围(默认),使用此依赖范围对于编译、测试、运行三种都有效,即在编译、测试和运行的时候都要使用该依赖 Jar 包。
- test:测试依赖范围,从字面意思就可以知道此依赖范围只能用于测试,而在编译和运行项目时无法使用此类依赖,典型的是 JUnit,它只用于编译测试代码和运行测试代码的时候才需要。
- provided:此依赖范围,对于编译和测试有效,而对运行时无效。比如
servlet-api.jar
在 Tomcat 中已经提供了,我们只需要的是编译期提供而已。 - runtime:运行时依赖范围,对于测试和运行有效,但是在编译主代码时无效,典型的就是 JDBC 驱动实现。
- system:系统依赖范围,使用 system 范围的依赖时必须通过 systemPath 元素显示地指定依赖文件的路径,不依赖 Maven 仓库解析,所以可能会造成建构的不可移植。