1.依赖范围
依赖范围是用来控制依赖与classpath(编译classpath、测试classpath、运行classpath)的关系
eg : <scope>provided</scope>
Maven有以下几种依赖范围:
compile:编译依赖范围,默认使用该依赖范围。对编译、测试、运行三种classpath都有效。
test:测试依赖范围,只对测试classpath有效。
runtime:运行时依赖范围,对测试跟运行classpath有效。
provided:已提供依赖范围,编译跟测试classpath有效。因为运行项目时容器提供,不需要maven重复引入。
2. 可选依赖
可选依赖可以理解为不传递依赖,通过<optional>元素为true表示依赖为可选依赖,只对当前项目有影响。当其他项目依赖于当前项目时,可选依赖不会传递。
eg:只想对当前项目进行热部署,需配置<optional>true</optional>
<!-- 热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>
3. 排除依赖
项目A依赖于项目B,但是不想引入传递性依赖C,而是自己显式的引入依赖C的某个版本。
通过<exclusion>排除依赖,提供groupId跟artifactId即可,无需提供version。因为这二者可以定位唯一的依赖。
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
4.镜像
通过配置镜像可以替代中央仓库,从而提供比中央仓库更快的服务。但是由于镜像仓库屏蔽了被镜像仓库,所以当镜像仓库挂了时,maven无法访问被镜像仓库,导致无法下载jar等。
一般在maven conf文件夹下的settings.xml中添加镜像配置,如下所示:
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
5.仓库搜索
通过仓库搜索可以方便的找到依赖的声明片段,然后直接copy到pom.xml中,也可以下载jar等等。
Nexus : https://repository.sonatype.org
mvnrepository : http://mvnrepository.com/
6.依赖管理&插件管理
依赖管理:父pom中使用<dependencyManagement>...</dependencyManagement>声明依赖,统一管理项目的版本号,确保应用的各个项目的依赖和版本一致。
dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的。这一点与dependencies不同。
dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)
插件管理:父pom中使用<pluginManagement>...</pluginManagement>声明依赖,统一管理项目的插件。同理该配置不会造成实际的插件调用。只有子项目pom.xml配置的plugin跟pluginManagement中配置的插件匹配(groupId跟artifactId一致)时,才会生效。
7.聚合跟继承
多模块的maven项目中聚合跟继承两个概念,聚合为了方便快速构建项目,继承为了消除重复配置。
父项目中打包方式为pom,并且包含<modules>元素实现聚合;通过dependencyManagement、pluginManagement供子项目继承。
<packaging>pom</packaging>
<modules>
<module>common</module>
<module>persistence</module>
<module>service</module>
<module>web</module>
</modules>
8.安装 JAR 包添加到本地仓库
mvn install:install-file -Dfile=D:\repository\com\superwheat\demo-spring-boot-starter\0.0.1-SNAPSHOT\demo-spring-boot-starter-0.0.1-SNAPSHOT.jar -DgroupId=com.superwheat -DartifactId=helloworld-spring-boot-starter -Dversion=0.0.1-SNAPSHOT -Dpackaging=jar
其中,-Dfile为jar包的位置