maven 知识补习

前言

maven 用了很多年了,但是经常遇到不知道的maven知识,所以买了《maven 实战》这本书看看,补习一下我不知道或者模糊的maven知识.这本书写的通俗易懂,知识详细,值得一看!!!
在这里插入图片描述

坐标详解
  1. <packaging><packaging/>
    默认值为jar,一般与文件的扩展名一致,但是也不是绝对,比如<packaging>maven-plugin<packaging/> 的文件扩展名为.jar
  2. classifier
    nexus-indexer-2.2.0-javadoc.jar ,nexus-indexer-2.2.0-sources.jar中的javadoc和sources就是classifier .classifier 能直接指定,而是有插件帮助生成的.
依赖范围
  1. provided 对于编译和测试的classpath有效, 典型就是servlet-api
  2. runtime 对于测试和运行的classpaht有效,比如jdbc驱动
  3. system 对于编译和测试的classpath有效,使用system依赖范围时必须通过systemPath元素知道那个依赖的文件路径.
依赖调解

例1:A→B→C→X(1.0) , A→D→X(2.0) 依赖调解第一原则:路径最近者优先,所以X(2.0)会被解析使用.
例2:A→B→X(1.0) , A→D→X(2.0) 依赖调解第二原则:第一声明者优先.

可选依赖
			<dependency>
	             <groupId>xx.xxx</groupId>
	             <artifactId>xxx</artifactId>
	             <version>2.0.1</version>
	            <optional>true</optional>
        	</dependency>

optional=true 就是可选依赖,无法被传递,需要显示声明.

依赖优化
 //查看当前项目已解析的依赖
 mvn dependency:list 
 //查看当前项目的依赖树
 mvn dependency:tree
 //只会分析编译主代码和测试代码需要用到的依赖,在输出信息中 
 //Used undeclared dependencies found: 用到的但是没有声明的
 //Unused declared dependencies found: 没有用到的但是声明了的
 mvn dependency:analyze
生命周期和插件
三套生命周期

初学者往往以为生命周期是一个整体,其实不然,maven拥有三套互相独立的生命周期,它们分别是clean,default和site.

插件自定义绑定
					<execution>
						<!-- id 为post-unit-test的任务-->
                        <id>post-unit-test</id>
                        <!--绑定到test,生命周期 -->
                        <phase>test</phase>
                        <goals>
                        <!-- 插件中目标 -->
                            <goal>report</goal>
                        </goals>
                    </execution>

如果多个目标被绑定到同一个阶段,它们的执行顺序会是怎样的?
答案很简单,当多个插件目标绑定到同一个阶段的时候,这些插件声明的先后顺序决定了目标的执行顺序.

聚合与继承
聚合

聚合模块与其他模块的目录结构并非一定要是父子关系,比如下面这种也可以

	<modules>
        <module>../asmpcloud-common</module>
        <module>../asmpcloud-service-center</module>
        <module>../asmpcloud-job-center</module>
    </modules>

元素 relativePath 表示父模块pom的相对路径,该路径中…/xxx/pom.xml 表示 pom位置在于该项目平行的目录下.当项目构建时,maven会首先根据relativePath检查父pom,如果找不到,再从本地的仓库中去找.relativePath的默认值是…/pom.xml,也就是说,maven默认父pom在上一层目录下.

可继承的pom元素

我只罗列一下可能会用到的

  • groupId
  • version
  • description
  • organization
  • url
  • properties
  • dependencies
  • dependencyManagement
  • repositories
  • build
Import
<!-- 锁定SpringCloud版本 -->
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${springcloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

如上配置,<scope>import</scope> 只有在<dependencyManagement></dependencyManagement>中才能生效.使用该范围的依赖通常指向一个pom,作用是将目标pom中的dependencyManagement配置导入并合并到当前pom的 dependencyManagement 中 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值