Maven学习(二)

6 篇文章 0 订阅

项目间大致有三种关系:依赖、聚合、继承

依赖在pom.xml中表示为depency,是此构建此项目需要的外部支持。

聚合是将多个项目聚集起来作为一个大项目。

继承是有父pom,子项目可以从父pom中继承相应的配置内容,从而可以简化子项目的配置。

一、依赖管理(在前篇文章的基础上的补充)

这里解释一下外部依赖和快照依赖。

外部依赖:指不存在在maven中央库,本地库,远程库的jar包,如本地硬盘中的jar包。用<systemPath>指定jar包的位置。

快照依赖:指依赖项使用正在开发中的最新版本(快照版本),每次构建总是下载最新的快照版本。如需使用某个版本的快照版本,版本号后附加-SNAPSHOT

包冲突:

很多时候我们pom中引用了jar包,有些包重复,就会发生冲突。例如我运行一个项目,引入了相应的jar包,然后tomcat中内置有不同版本相同的jar包,这个时候就有冲突。

实例:

A->B->C->D1,E->F->D2,D1和D2是D的不同版本。

解决冲突:

包冲突可以采用给指定依赖范围解决,以下是其他的两种解决冲突的方式。

依赖调解:按照传递路径(即依赖的路径)的长度进行调解,去最短路径,长度相同时采取最先申明原则(谁先引用取谁)。

如上实例,应取D1。

排除依赖:发现依赖包里有不稳定,可以排除依赖。即如果不想E->F->D2引入D2的话,那在声明引入E时将D2排除掉。

排除标签是<exclusion>,例:

<dependency>
    <groupId>test</groupId>
    <artifactId>A</artifactId>
    <version>1.1</version>
    <exclusions>
        <exclusion>
            <groupId>D1</groupId>
            <artifactId>D1</artifactId>
        </exclusion>
    </exclusions>
</dependency>

其他依赖

多模块的依赖

当有一个工程中多个模块依赖相同包的时候 ,为了方便版本号的管理,可以提取出一个父亲模块来管理共同依赖的包版本,即此时在子模块中不需要指定版本号,直接在父模块中指定,修改也只在父模块中。

优化依赖:

大致有三种:

mvn dependency:list  查看已解析依赖

mvn dependency:tree  查看依赖树

mvn dependency:analyze  分析依赖树,查找出在编译和测试中未使用但显示声明的依赖

依赖的版本区间

依赖的版本区间指定,这表示可以使用在此区间内的版本

(,1.0] x <= 1.0       //版本小于等于1.0

1.0 "Soft" requirement on 1.0 (just a recommendation - helps select the correct version if it matches all ranges)

[1.0] Hard requirement on 1.0

[1.2,1.3] 1.2 <= x <= 1.3         //版本区间

[1.0,2.0) 1.0 <= x < 2.0

[1.5,) x >= 1.5

(,1.0],[1.2,) x <= 1.0 or x >= 1.2. Multiple sets are comma-separated

(,1.1),(1.1,) This excludes 1.1 if it is known not to work in combination with this library 

二、快照版本

前面有提到快照版本号“-SNAPSHOT”,maven2会根据模块是否包含此版本号(pom文件中的version)来判断是快照版本还是正式版本。如果是快照版本,那么在部署时会自动发布到快照版本库中,覆盖老的快照版本。这时使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。同一个SNAPSHOT版本的依赖可以在仓库中存在多份,每一份都是代码在某一个特定时间的快照,但maven每次都下载更新的版本,所以这相当于“覆盖”。

如果是正式发布版本,那么在部署时会自动发布到正式版本库中,而使用正式版本的模块,在不更改版本号的情况下,编译打包时如果本地已经存在该版本的模块则不会主动去镜像服务器上下载。

如果maven以前下载过指定的版本,那需要将版本升级maven才会在仓库中下载新的快照。也可以使用-U参数强制maven现在最新的快照构建

mvn clean package -U

三、Profile

在构建产品的时候, 指定需要使用的 profile, 则可以很方便地构建出针对不同环境的可运行的产品。maven 的 profile 是一组可选的配置, 可以用来设置或者覆盖配置的默认值, 有了 profile , 就可以为不同的环境定制构建。profile是用来定义一些在构建生命周期中使用的环境配置,profile可以设置成在不同的环境下激活不同的profile。

使用规则

profile 元素可以有多个, 需要定义在 profiles 元素中, 且必须包含 id, 通过 -P<id> 指定激活,多个id之间使用逗号分隔

profile 相当于一个可选的 pom.xml , 几乎支持 pom.xml 中的所有元素, 且要遵循在 pom.xml 中的嵌套层次

activation 元素规定了该 profile 的激活规则

注:此篇文章参考了很多博客(以下为主要参考文章),在此仅作记录。

参考:

1、https://www.cnblogs.com/fnlingnzb-learner/p/10537032.html

2、https://blog.csdn.net/luojbin/article/details/81211556

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值