黑马程序员技术交流社区

标题: 【广州校区】【原创】Maven基础总结和常见问题解析 [打印本页]

作者: 帅气de路人甲    时间: 2018-11-15 09:42
标题: 【广州校区】【原创】Maven基础总结和常见问题解析
本帖最后由 帅气de路人甲 于 2018-11-15 09:47 编辑

【001】什么是Maven?它有什么用途?答:
Maven是基于项目对象模型(POM Project Object Model),可以通过一小段描述信息(配置文件)来管理项目的构建、报告和文档的跨平台软件项目管理工具。它主要服务于基于Java平台的项目构建,依赖管理和项目信息管理
Maven主要解决两个方面的问题:
①        jar包的版本控制
②        项目构建
使用Maven搭建项目的好处是:
一键编译、测试、打包、部署、运行
Maven的中央仓库地址:
http://repo1.maven.org/maven2/

【002】Maven安装与配置?
答:
Maven依赖Java运行环境,需先配置JDK环境变量,否则Maven无法使用
安装步骤:
①        下载Maven并解压,新建环境变量 Maven_Home,之后编辑Path配置Maven的 bin 路径
②        在window命令提示符下测试是否配置成功:mvn -v
③        在开发工具(Meclipse、IDEA)中配置Maven
④        配置本地仓库:
Maven的默认本地仓库为:${ user.home }/.m2/repository;可在setting.xml中修改指定自定义的仓库路径
注意:
Maven项目的根目录下必定存在 src 文件夹和 pom.xml

【003】Eclipse中如何配置Maven环境?
答:
①        配置Maven地址
window --> preferences --> Maven --> Installations --> add
②        设置setting.xml地址,指定全局的setting.xml配置文件路径
Maven --> User settings --> Browser(Global Settings) --> Update Settings --> Reindex
③        重构索引(目的:让Eclipse去本地库查找依赖的组件)
window --> show view --> Maven Repositories --> Local Repository --> Rebuild index
④        需配置Eclipse的JDK为 1.7+

【004】Maven的常用命令?
答:
mvn clean                清除原来的编译结果
mvn compile                编译
mvn test                        运行测试代码(mvn test -Dtest=类名  //  单独运行测试类)
mvn package                打包项目(mvn package -Dmaven.test.skip=true  //  打包时不执行测试)
mvn install                将项目打包并安装到本地仓库(父工程一定要先安装)
mvn deploy                发布到本地仓库或服务器

【005】Maven的核心概念有哪些?
答:
仓库、坐标、依赖、生命周期、插件目标等
①  仓库
Maven仓库有两大类:
Maven的本地仓库在安装Maven时并不会创建,只有在第一次执行Maven命令的时候才被创建
Maven本地仓库的默认位置只有一个 .m2/repository/ 的仓库目录(可以修改)
包含了许多开源的Java构件:http://repo1.maven.org/maven2/一种特殊的远程仓库,架设在局域网内的仓库②  坐标
Maven坐标的主要元素有:
groupId、artifactId、version简称为:GAV
③  依赖
④  生命周期
⑤  插件目标

【006】Maven为什么要使用坐标?如何获取?
答:
Maven拥有大量构件,需找一个来唯一标识一个构件的统一规范
获取:
http://mvnrepository.com/ 网站上可以搜索具体的组织或项目关键字,之后复制对应的坐标到pom.xml中即可
C:/Users/CHUANG/AppData/Local/YNote/data/13926118208@163.com/6d7e5bdd959049f4883b7715eab155ee/clipboard.png

【007】Maven的依赖指的是什么,它的基本坐标有哪些?
答:
Maven所依赖的组件,就是引用组件里的 jar 包
依赖的基本坐标包含:groupId、artifactId、version,缺一不可(Maven依赖的是坐标,通过坐标查找组件)
依赖的类型(type):默认为 jar
注意:依赖时,如果出现“ <type> pom.lastUpdated </type> ”,需进行删除

【008】Maven的依赖范围有哪些?
答:
依赖范围(scope)默认为:compile
依赖范围(scope)主要用来控制依赖和编译、测试、运行的classpath的关系,具体的依赖范围有6种:
①  compile        对于编译、测试、运行三种的 classpath 都有效
②  test                只对测试的 classpath 有效
③  provided        对于编译、测试的 classpath 有效,但对运行无效
④  runtime        只对运行的 classpath 有效,运行时提供
⑤  system        系统范围,自定义构件,指定systemPath;跟provided 相似
⑥  import        只使用在<dependencyManagement>中,表示从其它的pom中导入dependency的配置
C:/Users/CHUANG/AppData/Local/YNote/data/13926118208@163.com/46a5f86460b4479e854f89f2054fa44f/clipboard.png

【009】对于传递性依赖,依赖的范围如何?
答:
假设 C 依赖 B , B 依赖 A ,那么称 C 对 B 是第一直接依赖, B 对 A 是第二直接依赖, C 对 A 是传递依赖
例:
c对b的依赖范围是compile,b对a的依赖范围也是compile,c对a是compile
c对b的依赖范围是compile,b对a的依赖范围是test,c对a没有依赖,在c中不能使用a的组件
c对b的依赖范围是compile,b对a的依赖范围是provided,c对a也没有依赖
c对b的依赖范围是compile,b对a的依赖范围是runtime,c对a的依赖范围也是runtime

【010】当Maven发送依赖冲突时,应如何选择?
答:
就近原则






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2