1.依赖范围

依赖范围是用来控制依赖与classpath(编译classpath、测试classpath、运行classpath)的关系

eg : <scope>provided</scope>

Maven有以下几种依赖范围:

compile:编译依赖范围,默认使用该依赖范围。对编译、测试、运行三种classpath都有效。

test:测试依赖范围,只对测试classpath有效。

runtime:运行时依赖范围,对测试跟运行classpath有效。

provided:已提供依赖范围,编译跟测试classpath有效。因为运行项目时容器提供,不需要maven重复引入。

maven 执行npm run build maven runtime_spring

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/

maven 执行npm run build maven runtime_maven_02

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包的位置