Maven面试题
1.Maven是什么?
Maven主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。
Maven的主要功能分为以下几点:
① 依赖管理系统
② 多模块构建
③ 一致的项目结构
④ 一致的构建模型和插件机制
2.项目为什么要使用Maven构建?
首先,Maven是一个优秀的项目构建工具,使用Maven可以很方便地对项目进行分模块构建,这样在开发和测试打包部署时,效率会提高很多。
其次,Maven可以进行依赖管理。使用maven可以将不同系统的依赖进行统一的管理,并且可以进行依赖之间的传递和继承。
3.Maven常用命令
mvn install 项目打包并且打到本地仓库中
mvn deploy 项目发布,将项目打到公司私服上
mvn test 运行应用程序中的单元测试
mvn clean 清除项目目录中的生成结果
mvn package 打包成jar、war
4、Maven测试
maven测试为 default 生命周期中的test阶段。
maven-surefire-plugin 的test目标会自动执行测试源码路径下符合命名模式的测试类。
默认测试源代码路径: src/test/java/
测试类命名模式:
*/Test.java
*/ *Test.java
*/ *TestCase.java
按上述模式命名的类, 使用 mvn test 命令就能自动运行他们。
5.Maven的生命周期
maven有三套生命周期,分别为:
①clean 周期:主要用于清理上一次构建产生的文件,可以理解为删除target目录
clean
②默认周期
主要阶段包含:
process-resources 默认处理src/main/resources/下的文件,将其输出到classpath目录中,
compile 编译src/main/java下的java文件,产生对应的class,
process-test-resources 默认处理src/test/resources/下的文件,将其输出到测试的classpath目录中,
test-compile 编译src/test/java下的java文件,产生对应的class,
test 运行测试用例,
package 打包构件,即生成对应的jar, war等,
install将构件部署到本地仓库,
deploy 部署构件到远程仓库
③site周期
主要阶段包含
site 产生项目的站点文档
site-deploy 将项目的站点文档部署到服务器
6.排除依赖
A依赖B,B依赖C,A需排除B中的C(例如重复依赖A已有C)可以使用exclusions
7.处理无法下载的依赖
① 手动放到本地仓库
② 通过命令放到本地仓库
③ 在工程中建立自定义一个目录,手动build path
8.依赖的范围(了解)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
compile
默认scope为compile,表示为当前依赖参与项目的编译、测试和运行阶段,属于强依赖。打包之时,会打到包里去。
test
该依赖仅仅参与测试相关的内容,包括测试用例的编译和执行,比如定性的Junit。
runtime
依赖仅参与运行周期中的使用。一般这种类库都是接口与实现相分离的类库,比如JDBC类库,在编译之时仅依赖相关的接口,在具体的运行之时,才需要具体的mysql、oracle等等数据的驱动程序。
此类的驱动都是为runtime的类库。
provided
该依赖在打包过程中,不需要打进去,这个由运行的环境来提供,比如tomcat或者基础类库等等,事实上,该依赖可以参与编译、测试和运行等周期,与compile等同。区别在于打包阶段进行了exclude操作。
system
使用上与provided相同,不同之处在于该依赖不从maven仓库中提取,而是从本地文件系统中提取,其会参照systemPath的属性进行提取依赖。
import
这个是maven2.0.9版本后出的属性,import只能在dependencyManagement的中使用,只能引用packaging为pom的,能解决maven单继承问题,import依赖关系实际上并不参与限制依赖关系的传递性。