maven编译:Found duplicate... 问题的解决

2024-09-01 00:44

本文主要是介绍maven编译:Found duplicate... 问题的解决,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 问题描述

  • 一些开源的Java项目对依赖有着很严格的要求,会在root模块的pom.xml文件中,使用各种maven plugin检查依赖是否规范
    • apache的maven-dependency-plugin:可以检查是否存在unused dependency、used但未explicitly import的dependency等
    • org.basepom.mavenduplicate-finder-maven-plugin:可以查找和标记Java clapss上重复和冲突的class或resource
  • 最近的工作中,就因为引入新的依赖导致duplicate-finder-maven-plugin的检查未通过,关键信息如下
  • 仔细研读后,总结起来就是duplicate-finder-maven-plugin的检查不通过(虽然是WARNING信息)
    • 在complile、runtime、test classpath,都发现了 重复但相同的资源 char-whitelist.yaml,这个资源文件来自两个不同的依赖com.xxx.apm:config-loader:1.0.10com.xxx.metrics2:core:1.1.2
    • 在complile、runtime、test classpath,都发现了重复但不同的类 com.xxx.apm.shade.jnr.unixsocket.UnixSeqPacketChannel,这个资源文件来自两个不同的依赖com.xxx.metrics2:extension-exporter-unix-socket:1.1.2com.xxx:metrics4j:1.0.57
    [INFO] --- duplicate-finder-maven-plugin:1.5.1:check (default) @ onequery-common ---
    [INFO] Checking compile classpath
    [INFO] Checking runtime classpath
    [INFO] Checking test classpath[WARNING] Found duplicate (but equal) resources in [com.xxx.apm:config-loader:1.0.10, com.xxx.metrics2:core:1.1.2]:
    [WARNING]   char-whitelist.yaml
    [WARNING] Found duplicate and different classes in [com.xxx.metrics2:extension-exporter-unix-socket:1.1.2, com.xxx:metrics4j:1.0.57]:
    [WARNING]   com.xxx.apm.shade.jnr.unixsocket.UnixSeqPacketChannel
    [WARNING] Found duplicate classes/resources in compile classpath.[WARNING] Found duplicate (but equal) resources in [com.xxx.apm:config-loader:1.0.10, com.xxx.metrics2:core:1.1.2]:
    [WARNING]   char-whitelist.yaml
    [WARNING] Found duplicate and different classes in [com.xxx.metrics2:extension-exporter-unix-socket:1.1.2, com.xxx:metrics4j:1.0.57]:
    [WARNING]   com.xxx.apm.shade.jnr.unixsocket.UnixSeqPacketChannel
    [WARNING] Found duplicate classes/resources in runtime classpath.[WARNING] Found duplicate (but equal) resources in [com.xxx.apm:config-loader:1.0.10, com.xxx.metrics2:core:1.1.2]:
    [WARNING]   char-whitelist.yaml
    [WARNING] Found duplicate and different classes in [com.xxx.metrics2:extension-exporter-unix-socket:1.1.2, com.xxx:metrics4j:1.0.57]:
    [WARNING]   com.xxx.apm.shade.jnr.unixsocket.UnixSeqPacketChannel
    [WARNING] Found duplicate classes/resources in test classpath.
    
  • 按照之前暴力求解的方法,直接找到对应的依赖,从其所在的直接依赖中exclude掉任意一个就行
  • 结果,打包部署后发现服务无法运行,这时候只能静下心来研究duplicate-finder-maven-plugin

2. 解决办法

  • 官方文档:duplicate-finder-maven-plugin,github:basepom/duplicate-finder-maven-plugin
  • 官方文档内容很多,看得人心浮气躁,从github上发现了这个插件的源分支: Ning maven-duplicate-finder

    This plugin is a friendly fork (same main authors) of the Ning maven-duplicate-finder plugin. It is configuration compatible to the ning plugin; the only change required is the group and artifact id of the plugin itself.

  • Ning maven-duplicate-finder的REAME非常友好,很适合新手,这里列举一些简单的使用方式

2.1 完全跳过对某些依赖的check

  1. 在极少数情况下,需要完全跳过对某个依赖的check,这时可以使用<ignoredDependencies>标签(请在绝对必要时使用该标签
    <plugin><groupId>com.ning.maven.plugins</groupId><artifactId>duplicate-finder-maven-plugin</artifactId><version>1.1.0</version><configuration><ignoredDependencies><dependency><groupId>xml-apis</groupId><artifactId>xml-apis</artifactId><version>1.3.02</version></dependency></ignoredDependencies>...</configuration>
    </plugin>
    

2.2 跳过对依赖中某些类或资源的check

  • 一般冲突的是多个依赖中的重名类或资源,这时可以

    • 使用<conflictingDependencies>标签,指明冲突的依赖
    • 使用<classes>标签,指明可以跳过重复类
    • 使用<packages>标签,指明可以跳过的重复类的包名
    • 使用<resources>标签,指明可以跳过的重复资源
    • 使用<resourcePattern>标签,指明可以跳过的重复资源的正则表达式
    <plugin><groupId>com.ning.maven.plugins</groupId><artifactId>duplicate-finder-maven-plugin</artifactId><version>1.1.0</version><configuration><exceptions><exception><conflictingDependencies><dependency><groupId>jaxen</groupId><artifactId>jaxen</artifactId><version>1.1.1</version></dependency><dependency><groupId>xml-apis</groupId><artifactId>xml-apis</artifactId><version>[1.3.02,1.3.03]</version></dependency></conflictingDependencies><classes><class>org.w3c.dom.UserDataHandler</class></classes><packages><package>org.w3c.dom.ls</package></packages><resources><resource>log4j.xml</resource></resources><resourcePatterns><resourcePattern>files.*</resourcePattern></resourcePatterns></exception></exceptions></configuration>
    </plugin>
    

2.3 其他配置,如跳过duplicate检查

  • 文章开头的duplicate信息是WARNING级别,但maven编译也失败了,这是因为<failBuildInCaseOfConflict>为true,一旦遇到冲突就失败

  • 如果想偷懒,可以通过调整下面的配置项,使整个项目不进行check、跳过某些classpath的check、甚至在出现冲突时编译不失败等

  • 更多配置可以参考:Simple configuration

    <skip>false</skip>
    <checkCompileClasspath>true</checkCompileClasspath>
    <checkRuntimeClasspath>true</checkRuntimeClasspath>
    <checkTestClasspath>true</checkTestClasspath>
    <failBuildInCaseOfDifferentContentConflict>false</failBuildInCaseOfDifferentContentConflict>
    <failBuildInCaseOfEqualContentConflict>false</failBuildInCaseOfEqualContentConflict>
    <failBuildInCaseOfConflict>false</failBuildInCaseOfConflict>
    

这篇关于maven编译:Found duplicate... 问题的解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125462

相关文章

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

如何解决线上平台抽佣高 线下门店客流少的痛点!

目前,许多传统零售店铺正遭遇客源下降的难题。尽管广告推广能带来一定的客流,但其费用昂贵。鉴于此,众多零售商纷纷选择加入像美团、饿了么和抖音这样的大型在线平台,但这些平台的高佣金率导致了利润的大幅缩水。在这样的市场环境下,商家之间的合作网络逐渐成为一种有效的解决方案,通过资源和客户基础的共享,实现共同的利益增长。 以最近在上海兴起的一个跨行业合作平台为例,该平台融合了环保消费积分系统,在短

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

缓存雪崩问题

缓存雪崩是缓存中大量key失效后当高并发到来时导致大量请求到数据库,瞬间耗尽数据库资源,导致数据库无法使用。 解决方案: 1、使用锁进行控制 2、对同一类型信息的key设置不同的过期时间 3、缓存预热 1. 什么是缓存雪崩 缓存雪崩是指在短时间内,大量缓存数据同时失效,导致所有请求直接涌向数据库,瞬间增加数据库的负载压力,可能导致数据库性能下降甚至崩溃。这种情况往往发生在缓存中大量 k

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO