为了账号安全,请及时绑定邮箱和手机立即绑定

Maven基础知识总结

标签:
Java Bootstrap

maven 一直没有研究过,最近学习了一下Eleven_Lee老师的课程https://www.imooc.com/learn/443,本文其实是一篇学习笔记。

1. maven坐标
  1. <groupId>: 组织名,一般是网址的反写+项目名
  2. <artifactId>: 项目名
  3. <version>: 版本号
  4. <packaging>: 打包方式
2. maven常用构建命令
命令 option 含义
mvn compile 编译
test 测试
package 打包
clean 删除target目录(字节码和测试报告等)
install 安装jar到本地仓库中

引入构建包的流程如下,假设本地两个maven工程A和B,其中A依赖B:

  • 进入B工程的目录,进行mvn install。效果是将B工程编包并发布到本地仓库
  • 在项目A的pom文件中,添加对B的依赖
  • 进入A工程目录,进行mvn compile编译即可。
3. maven中的坐标和仓库

在maven中,groupIdartifactIdversion一起形成坐标的概念。坐标能够唯一确定jar或者pom。

maven 的仓库分为本地仓库和远程仓库。
超级pom(全球中央仓库):
图片描述
图片描述

在setting文件中,可以设置镜像仓库,提高下载速度:

   <mirrors>
        <mirror>
             <id>groups</id>
             <mirrorOf>*</mirrorOf>
             <url>http://maven.net.cn/content/groups/public/</url>
         </mirror>
    </mirrors>

可以更改本地仓库的存放目录:

<localRepository>D:/maven/lib/</localRepository>
4. maven生命周期

maven存在3条生命周期流程,分别是clean(清理项目),default(构建项目)和site(生成项目站点)。下边分别给出每个生命周期流程中包含的具体内容。

  • clean(项目清理)流程
    • pre-clean:执行清理前的工作
    • clean:清理上一次构建生成的所有文件
    • post-clean:执行清理后的文件
  • default(构建项目)流程
    • compile:编译
    • test:测试
    • package:打包
    • install:安装
  • site(生成项目站点)流程
    • pre-site:在生成项目站点前要完成的工作
    • site:生成项目的站点文档
    • post-site:在生成项目站点之后要完成的工作
    • site-deploy:发布生成的站点到服务器上

在执行某个生命周期的时候,该生命周期的步骤会从开始的步骤依次执行。
以default为例:
执行compile,则只执行compile
执行test,则执行compile,test
执行package,则执行compile,test,package
执行install,则执行compile,test,package,install。

5. maven中pom文件标签

<project> : 根元素,包含约束信息

<modelVersion> : 指定当前pom的版本

<groupId> : 反写的公司网址+项目名

<artifactId> : 项目名+模块名

<version> : 版本号。一般为三位数,大版本号.分支版本号.小版本号。版本类型一般有5种:snapshot(快照)、alpha(内部测试)、beta(公测)、release(稳定版本)、GA(正式发布)。

<packaging> : 打包方式,一般为jar、war、zip或者pom

<name> : 项目描述名

<url> : 项目地址

<description> : 项目描述

<dependencies> : 依赖列表,包含依赖项

<dependency> : 依赖项,其中包含groupId,artifactId,version,type,scope(依赖范围),optional(设置依赖是否可选,默认false),exclusions(排除依赖传递列表)

<dependencyManagement> : 依赖管理,包含一个依赖列表。

<build> :

<plugins> : 插件列表

         <plugin> :

                   <groupId> :

                   <artifactId> :

<parent> : 对父模块的pom的集成

<modules> : 实现maven的聚合

<module> : 实现maven的聚合

6. maven依赖范围 <scope> 标签

scope标签指定的依赖范围,有3种作用域,分别是编译、测试和运行时期。
scope标签的值,有6种类型,分别是:

  • compile:默认值,编译测试和运行都有效
  • provided:编译和测试的时候有效,运行时候不生效
  • runtime:测试和运行时候有效
  • test:只在测试的时候有效
  • system:在编译和测试的时候有效,与本机系统关联,可移植性较差
  • import:导入的范围,使用在dependencyManagement标签中,表示从其他的pom中导入dependency的配置
7. maven依赖传递

maven中的依赖具有传递性。如果项目A依赖项目B,项目B依赖项目C,那么项目A也是依赖项目C的。这一点可以在项目的依赖列表中看到。

maven中可以使用<exclusions>标签进行依赖排除。如下图所示,在pom中依赖了hongxing-nage,但是却排除了hongxing-nage所依赖的hongxing-bge。

图片描述

8. maven依赖冲突

所谓的依赖冲突,举例说明,工程A依赖B和C,但是B和C分别依赖不同版本的D。那么对于工程A来说,到底是依赖了哪个版本的D呢?

解决依赖冲突有2个基本的原则:

  1. 短路优先原则。 比如存在如下的两个依赖路径,那么A最终会依赖version2的X版本。
    • A->B->C->X(version1)
    • A->D->X(version2)
  2. 如果路径长度相同,那么先声明先解析。
9. maven聚合与继承

9.1 maven的聚合,是指将所有登记到module的模块全部编译打包。

目标:将B、C、D聚合到A

实现方式:将工程A的pom文件中的packaging标签设置成pom,添加modules标签,将B、C、D分别添加进来。

<modules>
<module>B</module>
<module>C</module>
<module>D</module>
</modules>

9.2 maven继承:

实现方式:

  1. 创建A项目,packaging的值为pom
  2. 将依赖X添加到项目A中
  3. 在项目B中添加parent标签,引入父pom的坐标
  4. 项目B的pom中,不需要指定X的版本号了
    图片描述
点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
1万
获赞与收藏
1426

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消