Maven入门基础

1.依赖范围

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

eg : provided

Maven有以下几种依赖范围:

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

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

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

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

Maven入门基础_第1张图片

2. 可选依赖

可选依赖可以理解为不传递依赖,通过元素为true表示依赖为可选依赖,只对当前项目有影响。当其他项目依赖于当前项目时,可选依赖不会传递。

eg:只想对当前项目进行热部署,需配置true

    
	
	    org.springframework.boot
	    spring-boot-devtools
	    true
	    true
	

3. 排除依赖

项目A依赖于项目B,但是不想引入传递性依赖C,而是自己显式的引入依赖C的某个版本。

通过排除依赖,提供groupId跟artifactId即可,无需提供version。因为这二者可以定位唯一的依赖。


  
    *
    *
  

4.镜像

通过配置镜像可以替代中央仓库,从而提供比中央仓库更快的服务。但是由于镜像仓库屏蔽了被镜像仓库,所以当镜像仓库挂了时,maven无法访问被镜像仓库,导致无法下载jar等。

一般在maven  conf文件夹下的settings.xml中添加镜像配置,如下所示:

  
	 
          alimaven
          aliyun maven
          http://maven.aliyun.com/nexus/content/groups/public/
          central
      
  

5.仓库搜索

通过仓库搜索可以方便的找到依赖的声明片段,然后直接copy到pom.xml中,也可以下载jar等等。

Nexus : https://repository.sonatype.org

mvnrepository : http://mvnrepository.com/

Maven入门基础_第2张图片

6.依赖管理&插件管理

依赖管理:父pom中使用...声明依赖,统一管理项目的版本号,确保应用的各个项目的依赖和版本一致。

 dependencyManagement里只是声明依赖,并不实现引入因此子项目需要显示的声明需要的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的。这一点与dependencies不同。

 dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)

插件管理:父pom中使用...声明依赖,统一管理项目的插件。同理该配置不会造成实际的插件调用。只有子项目pom.xml配置的plugin跟pluginManagement中配置的插件匹配(groupId跟artifactId一致)时,才会生效。

7.聚合跟继承

多模块的maven项目中聚合跟继承两个概念,聚合为了方便快速构建项目,继承为了消除重复配置。

父项目中打包方式为pom,并且包含元素实现聚合;通过dependencyManagement、pluginManagement供子项目继承。

pom


	common
	persistence
	service
	web

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

你可能感兴趣的:(Maven)