首页 > 其他分享 >maven使用技巧

maven使用技巧

时间:2023-08-31 20:22:11浏览次数:54  
标签:Maven 依赖 1.0 技巧 maven 版本 使用 2.0

简介入门

通过idea可以大致看出项目结构,和依赖关系. web依赖->jwt依赖->admin
如果在admin引入了redis 那么web默认间接依赖redis.
image.png
weblog-springboot是根项目; weblog-web依赖common项目和admin和jwt;
父pom文件,可以定义版本号和者自定义模块的版本号

<project xmlns = "http://maven.apache.org/POM/4.0.0"
    xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
    http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion> <!-- 模型版本 -->
  
    <!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->
    <groupId>com.companyname.project-group</groupId>
    <artifactId>项目名称</artifactId><!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
    <version>1.0</version><!-- 版本号 -->
  
</project>

依赖传递

功能 功能描述
依赖调节 决定当多个手动创建的版本同时出现时,哪个依赖版本将会被使用。 如果两个依赖版本在依赖树里的深度是一样的时候,第一个被声明的依赖将会被使用。
依赖管理 直接的指定手动创建的某个版本被使用。例如当一个工程 C 在自己的依赖管理模块包含工程 B,即 B 依赖于 A, 那么 A 即可指定在 B 被引用时所使用的版本。
依赖范围 包含在构建过程每个阶段的依赖。
依赖排除 任何可传递的依赖都可以通过 "exclusion" 元素被排除在外。举例说明,A 依赖 B, B 依赖 C,因此 A 可以标记 C 为 "被排除的"。
依赖可选 任何可传递的依赖可以被标记为可选的,通过使用 "optional" 元素。例如:A 依赖 B, B 依赖 C。因此,B 可以标记 C 为可选的, 这样 A 就可以不再使用 C。

依赖调节机制

一个项目引用的依赖分布图,非常的“凌乱”,有的依赖有多个依赖入口。那就会有个问题,比如你自己依赖了gson包,而依赖的其他第三方依赖中也引用了gson,那项目最终会使用哪个?

  1. 路径最近者优先

例如,项目A有这样的依赖关系:A->B->C->X(1.0)、A->D->X(2.0),X是A的传递性依赖,但是两条依赖路径上有两个版本的X,那么哪个X会被Maven解析使用呢?两个版本都被解析显然是不对的,因为那会造成依赖重复,因此必须选择一个。Maven依赖调解(Dependency Mediation)的第一原则是:路径最近者优先。该例中X(1.0)的路径长度为3,而X(2.0)的路径长度为2,因此X(2.0)会被解析使用。

image.png

  1. 第一声明者优先

依赖调解第一原则不能解决所有问题,比如这样的依赖关系:A->B->Y(1.0)、A->C->Y(2.0),Y(1.0)和Y(2.0)的依赖路径长度是一样的,都为2。那么到底谁会被解析使用呢?在Maven 2.0.8及之前的版本中,这是不确定的,但是从Maven 2.0.9开始,为了尽可能避免构建的不确定性,Maven定义了依赖调解的第二原则:第一声明者优先。在依赖路径长度相等的前提下,在POM中依赖声明的顺序决定了谁会被解析使用,顺序最靠前的那个依赖优胜。
image.png

依赖冲突

实际问题

首先根据报错查看源码,你需要断定出来是不是jar包冲突,这个时候比较明显的一些报错是比如明明源码中有这个方法,但是提示确找不到、或者干脆找不到这个类,还有你发现抛出的异常和源码中对应的行数所对应的内容也不一样等等。那么当你通过任何途径大概心理有个底了,就可以上才艺了,方法很多,能够解决问题就是好方法。
原文链接:https://blog.csdn.net/u010786653/article/details/119759060

分析准备:
  1. 通过idea查看
  2. 依赖传递的版本和当前版本不一致, mvn dependency:tree 查看结构

image.png

  1. 复现

image.png

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.10.1</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.2.6</version>
        </dependency>
解决问题
  1. 通过**exclusion ** 解决依赖冲突 或者只是想排除某些依赖

image.png

  1. 利用 依赖调解 机制(参考上)

依赖范围

image.png

生命周期

阶段 处理 描述
验证 validate 验证项目 验证项目是否正确且所有必须信息是可用的
编译 compile 执行编译 源代码编译在此阶段完成
测试 Test 测试
会执行test包下文件 使用适当的单元测试框架(例如JUnit)运行测试。
包装 package 打包 创建JAR/WAR包如在 pom.xml 中定义提及的包
检查 verify 检查 对集成测试的结果进行检查,以保证质量达标
安装 install 安装
比如安装common模块需要install安装后其他项目才能找到依赖common 安装打包的项目到本地仓库,以供其他项目使用
部署 deploy 部署 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程

标签:Maven,依赖,1.0,技巧,maven,版本,使用,2.0
From: https://www.cnblogs.com/july7/p/17670359.html

相关文章

  • Beyond Compare使用小技巧
    有时候我们需要比较文件夹内容是否相同,这个时候,可以使用BeyondCompare比较小技巧:可以设置Rule来进行比较规则的设置,这个地方我忽略了时间戳 ......
  • 如何使用grep搜索内容所在文件
    如何使用grep搜索内容所在文件Grep是一种强大的文本搜索工具,可以快速搜索文件内容,查找所需的文本信息。本文将介绍如何使用grep搜索内容所在文件。Grep的使用非常简单,只要在终端输入以下命令即可搜索给定文件夹中的文件:grep-r"内容"文件夹grep-rl"内容"文件夹-r参数表......
  • 线程池在工作中的几种使用姿势
    线程池在开发中一定会用到,如果能像golang一样,java语言也有协程,也许java程序员就少了一种包袱。回归正题,我们聊下到底有哪些线程池的使用方式,总结有以下几种。JDK内置线程池Spring线程池自己魔改封装1、JDK内置线程池常用的有:我们看下最全的线程池参数,探究为什么阿里规......
  • 【Visual Studio 使用技巧分享】任务列表的使用
    前言VisualStudio开发工具的熟练使用,能够潜在的提升我们工作效率,而且一些开发技巧的使用,会让我们的工作显得那么方便快捷。那么你知道VS中有哪些你不知道的使用小技巧呢?接下来,我们就来探索VS中的“任务列表”的使用。任务列表是使用TODO、HACK或自定义令牌等令牌的代码注......
  • ansible常用模块使用熟练!!!
    快速上手Ansible以及常见模块应用原创 北极星 运维记事 2023-06-2521:52 发表于四川收录于合集#Linux19个Playbook介绍Ansibleplaybook剧本介绍在ansible中,类似”脚本”的文件被称作”剧本”,英文名称为’playbook’,用于配置,部署,和管理被控节点我们只需要把......
  • [转]C#下使用XmlDocument操作XML详解
    C#下使用XmlDocument操作XML详解发布时间:2023/06/08  目录一、XMLDOM概述二、XML成员1、XMl节点:XmlNode1、属性:2、方法:2、XML文档:XMLDocument1、属性:2、方法:3、事件:3、XML元素:XmlElement1、属性:2、方法:三、创建......
  • 怎么建立和使用空间索引?
    0.为什么需要空间索引:https://www.cnblogs.com/2008nmj/p/14291508.html(提高空间查询效率)那么建立和使用空间索引呢?第一步:空间分割。 ......
  • 【HarmonyOS】一文教你如何使用低代码平台网格布局动态加载数据
    【关键字】低代码平台、AGC、API6、网格布局、数据模型 【写在前面】正式开工之前,先来说一下今天要实现的内容,今天会实现一个网格布局的展示,我会创建一个数据模型,然后网格列表的数据从数据模型中获取,从而实现一个动态展示的效果。在实现之前,先来简单说一下什么是数据模型?在......
  • .NET 6 使用AutoFac
    一先下载相关资源包 二定义module,方便注入 三在Program.cs注册 四 在构造函数中注入 ......
  • java 使用多线程的注意事项
    线程安全:确保共享资源的正确访问和修改,避免并发冲突。可以通过同步机制(如锁、互斥量、信号量等)或使用线程安全的数据结构来实现线程安全。案例:银行账户并发访问importjava.util.concurrent.locks.Lock;importjava.util.concurrent.locks.ReentrantLock;classBankAccount{......