一:Maven下载
1:下载压缩包
2:解压文件,并配置环境变量
3:修改配置文件
1:打开conf目录的settings.xml文件,修改本地仓库地址
默认为${user.home}/.m2/repository,可以不修改
在maven目录下新建maven-repo目录,修改本地仓库目录
2:修改镜像
3:修改jdk版本
4:在项目中配置maven
二:Maven生命周期
1:maven的三个内置周期
默认:进行项目编译打包等工作
站点:生成项目报告,站点,发布站点
清洁:为执行以上工作所作的必要清理,即删除target文件夹
2:默认的生命周期的几个重要阶段
1:编译:编译项目源代码
2:打包:用可分配格式(入jar)进行打包
3:安装:将软件包安装到本地仓库
三:maven常见命令
四:引入依赖时的scope标签
1:编译依赖范围(compile)
默认依赖范围,测试,运行,编译都有效
2:测试依赖范围(test)
只对测试的classpath有效
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
3:已提供依赖范围(provided)
典型的有servlet-api,对编译和测试的classpath有效,对运行无效
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
4:运行时依赖范围(runtime)
典型的有jdbc驱动实现,主代码在编译时只需要jdk提供的jdbc接口,在测试运行时才需要此依赖所引用的接口。因此对测试运行的classpath有效,对编译无效
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.7</version>
<scope>runtime</scope>
</dependency>
五:依赖传递
当项目所依赖的jar包也依赖于其它jar包时,只需引入项目所依赖的jar包即可,maven会自动引入jar包所依赖的其它jar包
a:当一个项目依赖了同一个jar包的不同版本时,后引入的版本会覆盖先引入的版本
b:最短路径优先原则:当项目只依赖A,而A依赖B,D,B依赖D时,那么会引入A所依赖的D的版本
c:路径相同先声明原则:当一个项目依赖A,B俩个不同jar包,而这俩个jar包又依赖同一个jar包时,项目会引入先依赖的jar包所声明的jar包的版本,如下图,最终项目将会引用1.2.3版本
当maven所引入的jar包版本过低时,如上图引入D.jar的版本过低时,可以手动排除重新引入
<dependency>
<groupId>dev.tuxjsql</groupId>
<artifactId>hikaricp-cp</artifactId>
<version>2.1</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
六:maven仓库
仓库分类
1:本地仓库
settings里配置的本地仓库
2:远程仓库 (3种)
- 中央仓库
- 私服
- 其它公共仓库
maven项目常用仓库
- 中央仓库:settings中默认的仓库
- 镜像仓库:通过settings.mirrors.mirror中配置的仓库
- 全局profile仓库:通过settings中的settings.repositories.repository配置
- 项目仓库:通过pom.xml中的repositories.repository配置
- 项目profile仓库:通过pom.xml中的profiles.profile.repositories.repository配置
- 本地仓库
仓库搜索顺序
本地仓库->全局profile仓库->项目profile仓库->项目仓库->镜像仓库->中央仓库
七:maven插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source><!-- 源码使用的jdk版本-->
<target>1.8</target><!-- 需要生成目标的class文件的编译版本-->
<encoding>UTF-8</encoding>
</configuration>
</plugin>