黑马程序员技术交流社区
标题:
【广州校区】【原创】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 定义当前Maven项目隶属项目、组织的域名(域名反写)
artifactId 定义实际项目中的一个模块(项目名称)
version 定义当前项目的当前版本
packaging 定义该项目的打包方式(pom / jar / war,默认为jar)
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