MAVEN的使用
@author 无忧少年
@creatTime 2019/09/23
一直在使用maven,却不知道maven具体干了什么,这里详细的学习和记录一下maven。
1.maven介绍
Maven是一个项目构建工具,能把项目抽象成一个POM(project object model),使用POM文件对项目进行构建、打包、文档化等操作。最重要的是解决了项目依赖的问题,简化项目环境搭建的过程。
实际上maven就是一款帮助程序员构建项目的工具,我们需要告诉maven需要哪些jar包,他会帮助我们下载所有的jar包,极大提升开发效率。
2. maven的配置
- 在官网下载安装包:http://maven.apache.org/download.cgi
- 解压缩压缩包
- 配置环境变量MAVEN_HOME=maven的解压后的目录
- 在变量Path的开头增加"%MAVEN_HOME%\bin;"
- 在MAVEN_HOME/conf/setting.xml文件中通过<localRepository > </localRepository>标签配置本地仓库的位置
3.MAVEN的使用
1.在IDEA中配置使用本地安装的maven
打开: File–>Settings, 然后按照下图操作
3.maven项目结构
- 项目结构
src/main/java : 项目java类文件位置
src/main/resources : 项目配置资源文件位置
src/test/java : 项目单元测试java类文件位置
src/test/resources : 项目单元测试配置资源文件位置
target : 项目打包后文件所在位置
4.maven的坐标、依赖
- 坐标:maven通过groupId、artifactId、version三个变量来唯一确定一个具体的依赖(俗称GAV)
- 依赖:在pom.xml中我们通过dependency来声明坐标信息(GAV)如:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.2.6.RELEASE</version>
</dependency>
这样我们就在项目中依赖了4.2.6.RELEASE版本的spring-core jar包.
注 :pom.xml中packaging用来指定打包方式,默认为:jar
- dependencyManagementy
1) 只能出现在父pom里
2) 统一版本号
3) 只是依赖声明,并不直接依赖,需要时在子项目中在声明要使用依赖的GA信息,V信息可以省略.
- 依赖scope
1) compile:编译依赖范围,在编译,测试,运行时都需要,依赖范围默认值
2) test:测试依赖范围,测试时需要。编译和运行不需要,如junit
3) provided:已提供依赖范围,编译和测试时需要。运行时不需要,如servlet-api
4) runtime:运行时依赖范围,测试和运行时需要。编译不需要,例如面向接口编程,JDBC驱动实现jar
5) system:系统依赖范围。本地依赖,不在maven中央仓库,结合systemPath标签使用
- 依赖传递时仲裁原则
1) 路径最短原则
2) 路径一样长,加载先后原则
注 : 第一列表示直接依赖的scope,第一行表示间接依赖的scope
- 依赖排除
使用<exclusions>标签下的<exclusion>标签指定GA信息来排除,例如:排除xxx.jar传递依赖过来的yyy.jar
<dependency>
<groupId>com.xxx</groupId>
<artifactId>xxx</artifactId>
<version>x.version</version>
<exclusions>
<exclusion>
<groupId>com.xxx</groupId>
<artifactId>yyy</artifactId>
</exclusion>
</exclusions>
</dependency>
- 依赖关系查看
进入工程根目录,在cmd中运行
1) mvn dependency:tree
命令会列出依赖关系树及各级依赖关系
2) mvn dependency:analyze
分析依赖关系