maven的基本使用
-
Maven解决的问题
- maven 是自动化构建工具。
- 构建:是将工程编译得到的结果部署到服务器上的过程
- 编译:.java文件通过javac编译器,编译为.class的字节码文件。
-
Maven对jar包的管理
- 有一个仓库的概念,统一管理jar包,而每一个jar用坐标来对应位置。对一个jar包而言,文件夹+名字+版本号,可以定位到唯一jar。
- 仓库
- 本地仓库(本机上的文件夹) -> *仓库(maven提供) -> 远程仓库(私服)
- 本地仓库是否能找到jar包? 如果jar不存在,去远程仓库查找,如果远程不存在,去*仓库查找。如果都找不到,报错。
- 仓库
- 有一个仓库的概念,统一管理jar包,而每一个jar用坐标来对应位置。对一个jar包而言,文件夹+名字+版本号,可以定位到唯一jar。
-
Maven项目
- 需要填写 groupId artifactId version (坐标三要素)
- groupId 代表jar所来源的渠道,对应文件夹的名字 (com.duyi / com.alibaba)
- artifactId 代表项目的唯一名字 maven-duyi-demo.jar
- version 代表版本号 1.0 2.0 ..
- -SNAPSHOT(快照版本,不稳定的)
- -RELEASE(发布版本,稳定的)
- 创建项目后提示是否自动引入包?
- 选择自动引入 - enable auto-import
- maven项目有一个约定好的目录结构
- 设计思想“约定优于配置” 是统一规范
- src 代码总目录
- 分级为 main(核心代码和资源)和test(测试代码和资源)
- 其中main又包含 java(存放代码)和resources(存放资源)文件夹
- pom.xml mvn的核心配置文件
文件中一定存在项目被打包之后所对应的坐标三要素(创建项目时填写的)
- 设计思想“约定优于配置” 是统一规范
- 需要填写 groupId artifactId version (坐标三要素)
-
maven的下载和配置
- 官网地址: https://maven.apache.org/download.cgi
- 下载 apache-maven-3.6.3-bin.zip (windows系统)
settings.xml是maven软件自身的配置文件
- 解压缩 -> 存放在英文路径下 -> 进入到bin文件夹 -> copy路径配置环境变量 (我的电脑右键)
- 验证 -> 命令提示符 -> 输入mvn -v (查看版本号)
- 关联idea -> File -> settings -> 搜索maven -> 更改maven home directory为自己下载的maven目录 -> 设置好settings.xml以及本地仓库
- 设置conf目录下的settings.xml
- 更改本地仓库的配置
C:\Users${用户名}.m2\repository - 通过镜像的方式更好的从*仓库下载jar包
通常使用阿里云提供的镜像 https://yq.aliyun.com/articles/703623<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
- 把上述地址copy到settings文件的
标签下
- 更改本地仓库的配置
- 在idea的user settings file选项中 找到刚才配置的文件。
- 如果出现报错,查看报错日志,Help -> show log in explorer
- 如果出现报错为
是版本不兼容的问题 更改为3.6.1版本ERROR - #org.jetbrains.idea.maven - com.google.inject.CreationException: Unable to create injector, see the following errors
-
maven的依赖
-
存放到<dependencies>标签下
-
查找依赖坐标,通过https://mvnrepository.com网站找到
-
以引用guava为例(google提供的使用最广泛的jar)
<dependencies> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>28.1-jre</version> </dependency> </dependencies>
-
依赖有递进关系
当引入依赖时,默认引入它依赖的其他jar。
项目A -> jar包B -> 相当于引入了jar包C -
剔除依赖的方式
使用标签, 以findbugs为例 <exclusions> <exclusion> <groupId>com.google.code.findbugs</groupId> <artifactId>jsr305</artifactId> </exclusion> </exclusions>
-
依赖使用的范围
- 构建包含的流程:编译、测试、运行、打包、安装、部署
compile test package install deploy
在右侧 maven projects标签栏中 打开项目名下面的lifecycle
如果没有 去View - Tool windows中查找
使用<scope>标签 放在artifactId下面
compile缺省值 伴随着项目的整个生命周期而存在。
provided已提供的 不需要将此依赖打包到项目最终的jar包里。
runtime运行时使用
比如<scope>runtime</scope>
test 测试时使用
system 自定义jar包位置 (不推荐)
- 构建包含的流程:编译、测试、运行、打包、安装、部署
-
-
maven的生命周期
-
clean validate compile test package verify install site deploy
- clean 项目清理
- validate 校验项目的可用性
- compile 编译
- test 执行单元测试
- package 打包
- verify 校验测试结果
- install 安装
- site 网站站点文件的创建(用的非常少)
- deploy 部署
-
命令效果:
-
compile 编译
注意点1:再次验证mvn -v里面的java运行目录,是否是jdk所在目录
如果不是,说明环境变量缺少JAVA_HOME的配置
注意点2:编译时需要指定jdk的版本
maven提供对全局jdk的配置(settings文件中标签下) <profile> <id>jdk-1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8 </maven.compiler.compilerVersion> </properties> </profile>
- 正式编译mvn clean compile
编译结果出现在根目录下的target文件夹中 - 执行打包 mvn clean package
打包结果,出现了项目的jar包 - 执行安装 mvn clean install (打包文件存储到本地仓库中)
本地仓库中出现对应的文件夹和jar - 执行部署 mvn clean deploy
首先要配置远程仓库的地址,然后将打包文件上传到远程仓库中
- 正式编译mvn clean compile
-
跳过测试阶段
- 方式一: mvn package -DskipTests 虽然跳过单元测试的执行,但仍然会编译代码,不是很推荐使用
- 方式二: mvn package -Dmaven.test.skip=true (最最常用的命令之一)既不会执行测试代码也不会编译。
-
查看依赖树
- 方式一:pom.xml文件中右键 -> diagrams -> show dependencies
- 方式二:mvn dependency:tree
功能: 更好的解决jar包冲突问题
-
-