maven插件依赖_当Maven依赖插件位于

maven插件依赖

问题:

我们进行了一个集成测试,该测试创建了一个Spring ClassPathXmlApplicationContext ,同时这样做导致NoSuchMethodError爆炸。 事实证明,我们对Spring构件的依赖版本存在冲突。 这本身不是一个不寻常的问题-使用Maven依赖插件使用verbose选项解决了这些问题。 但是,当Maven插件错误时,您该怎么办?

调查:

我们开始深入研究,发现AbstractAutowireCapableBeanFactorygetTypeForFactoryMethod方法尝试访问GenericTypeResolver resolveReturnTypeForGeneric方法,并在java.lang.NoSuchMethodError: org.springframework.core.GenericTypeResolver.resolveReturnTypeForGenericMethod(Ljava/lang/reflect/Method;

初步调查和谷歌搜索发现,该方法是在3.2.0中添加的,而我们应该在3.1.1中运行。 进一步的调查确定spring-data-mongodb依赖于范围[3.0.7-4) 1的 spring框架,并且由于maven在给定范围2的情况下采用了最新的可用版本,因此它尝试采用3.2.2。
注意,在显式版本依赖项和范围依赖项之间存在冲突的情况下,上述更改有所变化,但是IINM在确定spring mongo的依赖项时没有冲突。

该问题被两个症状进一步掩盖了:

  1. 我们还有其他使用这种模式的项目,没有问题-这可以通过以下事实来解释:maven的冲突解决机制选择默认情况下找到的最近版本3 ,因为所有其他需要spring-data-mongodb的项目都依赖于这个项目他们很幸运地抢到了3.1.1版本而不是3.2.2
  2. dependency:tree显示它带来了3.1.1,而带来了3.2.2-因为堆栈跟踪显示了其他结果,所以我编写了一个测试,检查上述每个类来自哪个jar,并验证了AbstractAutowireCapableBeanFactory类确实来自spring-beans 3.2.2而不是3.1.1,如“ mvndependency:tree”所示(非常感谢http://bit.ly/10zD1iV提供了在运行时查找类的jar的代码段)。

Maven依赖项:在构件中使用显示spring-beans:3.1.1的树输出

&gt:mvn dependency:tree -Dverbose -Dincludes=org.springframework
...
(omitted for clarity)
...
[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ wix-feature-toggle-administration ---
[INFO] artifact org.springframework:spring-beans: checking for updates from central
[INFO] artifact org.springframework:spring-beans: checking for updates from snapshots
[INFO] artifact org.springframework:spring-expression: checking for updates from central
[INFO] artifact org.springframework:spring-expression: checking for updates from snapshots
[INFO] artifact org.springframework:spring-tx: checking for updates from central
[INFO] artifact org.springframework:spring-tx: checking for updates from snapshots
[INFO] com.wixpress.common:wix-feature-toggle-administration:jar:2.180.0-SNAPSHOT
...
[INFO] +- org.springframework.data:spring-data-mongodb:jar:1.0.1.RELEASE:compile
[INFO] |  +- org.springframework:spring-beans:jar:3.1.1.RELEASE:compile
[INFO] |  |  \- (org.springframework:spring-core:jar:3.2.2.RELEASE:compile - omitted for conflict with 3.1.1.RELEASE)
[INFO] |  +- org.springframework:spring-expression:jar:3.1.1.RELEASE:compile
[INFO] |  |  \- (org.springframework:spring-core:jar:3.2.2.RELEASE:compile - omitted for conflict with 3.1.1.RELEASE)
[INFO] |  \- org.springframework.data:spring-data-commons-core:jar:1.2.1.RELEASE:compile
[INFO] |     +- (org.springframework:spring-beans:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |     \- (org.springframework:spring-tx:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] +- com.wixpress.common:wix-framework:jar:2.180.0-SNAPSHOT:compile
[INFO] |  +- org.springframework:spring-core:jar:3.1.1.RELEASE:compile
[INFO] |  |  \- org.springframework:spring-asm:jar:3.1.1.RELEASE:compile
...
I've removed additional outputs for clarity. The additional outputs were all 3.1.1 and were further down the tree (so irrelevant due to maven conflict resolving mechanism)

工件中使用了证明spring-beans:3.2.2的测试(断言错误中的jvm在说什么)

package com.wixpress.springVersionBug;import org.junit.*;
import org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory;
import org.springframework.core.GenericTypeResolver;
import java.security.CodeSource;
import static org.hamcrest.Matchers.endsWith;/*** @author ittaiz* @since 3/24/13*/public class SpringVersionTest {@Testpublic void verifySpringBeans311InClasspath(){verifyCorrectSpringVersionInClasspathFor(AbstractAutowireCapableBeanFactory.class,"spring-beans-3.1.1.RELEASE.jar");}@Testpublic void verifySpringCore311InClasspath(){verifyCorrectSpringVersionInClasspathFor(GenericTypeResolver.class,"spring-core-3.1.1.RELEASE.jar");}public void verifyCorrectSpringVersionInClasspathFor(Class springClass,String expectedJarFileName){CodeSource springClassCodeSource = springClass.getProtectionDomain().getCodeSource();Assert.assertNotNull("expecting "+expectedJarFileName+" to be loaded by non-system class loader",springClassCodeSource);Assert.assertThat(springClassCodeSource.getLocation().toString(),endsWith(expectedJarFileName));}
}

spring-beans成为3.2.2时, spring-core工件出现在3.1.1中的原因是我们的框架显式依赖于spring-core而该工件显式依赖于框架。 这意味着来自框架的spring-core 3.1.1是2跳,比来自spring-data-mongodb的3.2.2短。

解:

依赖spring-data-mongodb而像这样排除spring-beans

<dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-mongodb</artifactId><version>1.0.1.RELEASE</version><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId></exclusion></exclusions>
</dependency>

开放问号:

为什么dependency:tree(在详细模式下)没有显示在3.2.2中而是在3.1.1中显示了spring-beans,同时明确指定由于冲突而删除了spring-core 3.2.2? 我将此归结为依赖项插件中的错误。

  1. http://repo1.maven.org/maven2/org/springframework/data/spring-data-mongodb-parent/1.0.1.RELEASE/spring-data-mongodb-parent-1.0.1.RELEASE.pom ↩
  2. http://www.maestrodev.com/better-builds-with-maven/creating-applications-with-maven/resolving-dependency-conflicts-and-using-version-ranges/ ↩
  3. http://www.maestrodev.com/better-builds-with-maven/creating-applications-with-maven/resolving-dependency-conflicts-and-using-version-ranges/ ↩

参考: 当 Wix IO博客上的Maven依赖插件来自我们的JCG合作伙伴 Yoav Abrahami时。

翻译自: https://www.javacodegeeks.com/2013/04/when-maven-dependency-plugin-lies.html

maven插件依赖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349198.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为编程规范_华为 Java 编程规范出炉,究竟和官方文档有何不同?

来源&#xff1a;blog.csdn.net/chenleixing/article/details/441739851、引言这个标准是衡量代码本身的缺陷&#xff0c;也是衡量一个研发人员本身的价值。华为作为一家全球化的 IT 公司&#xff0c;十几万员工&#xff0c;无论是人事管理&#xff0c;还是代码管理&#xff0c…

变量是否在数组内c语言,函数内创建的数组在调用后,是否就不存在

函数内创建的数组在调用后&#xff0c;是不是就不存在本帖最后由 test_lockxxx 于 2014-04-23 09:31:06 编辑第1种写法&#xff1a;char *getABC(){char str[10];strcpy(str,"12345");return str;}void main(){char *p getABC();printf("%s\n",p); //这…

惯用并发:flatMap()与parallel()– RxJava常见问题解答

简单&#xff0c;有效和安全的并发是RxJava的设计原则之一。 然而&#xff0c;具有讽刺意味的是&#xff0c;它可能是该库中最容易被误解的方面之一。 让我们举一个简单的例子&#xff1a;假设我们有一堆UUID并且对于每个UUID &#xff0c;我们必须执行一组任务。 第一个问题是…

python%20开发工具_20招让你的Python飞起来!

今天分享的这篇文章&#xff0c;文字不多&#xff0c;代码为主。绝对干货&#xff0c;童叟无欺&#xff0c;主要分享了提升 Python 性能的 20 个技巧&#xff0c;教你如何告别慢Python。原文作者 开元&#xff0c;全栈程序员&#xff0c;使用 Python, Java, PHP和C。1. 优化算法…

c语言万能预编译,Objective-C学习笔记

import 指令(将文件的内容在预编译的时候拷贝到写指令的地方)import Foundation 框架NSLog 函数 NSLog("Hello, World!");NSString语法: NSString *str "jack";字符串占位符: %数据类型C 语言支持的数据类型基本数据类型int double float char构造类型数组…

Java命令行界面(第19部分):jClap

本系列中第19篇文章的重点是从Java代码解析命令行参数是jClap &#xff08; Java命令行参数解析器 &#xff09;&#xff0c;不应将它与称为JCLAP的库相混淆&#xff0c;而JCLAP库是我本系列先前文章的重点。 在以前的帖子覆盖JCLAP 1.4加尔斯吉尔温斯坦利&#xff08; snaq.ne…

使用Arquillian和LocalStack脱机测试AWS云堆栈

在AWS云堆栈 &#xff08;例如DynamoDB&#xff0c;S3等&#xff09;上构建应用程序时&#xff0c;需要针对这些组件编写测试。 您可能首先想到的是拥有一个用于生产的环境和一个用于测试的环境&#xff0c;然后针对该环境运行测试。 这对于集成测试&#xff0c;部署测试&…

python取文本中间_Python读取两个字符串之间的特定文本行

我无法让python读取特定的行。我正在做的事情是这样的&#xff1a;lines of data not neededlines of data not neededlines of data not needed--------------------------------------***** REPORT 1 *****--------------------------------------[key] lines of interest ar…

c语言7.5return的值是,这个真心搞不懂了。求助

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼回复 15楼. 假如你每天签到拿4经验&#xff0c;300000/475000天&#xff0c;如果从1岁开始签到&#xff0c;那100年36500天&#xff0c;你差不多要活200年保持每天签到(谁知道200年后还有没有签到这玩意)&#xff0c;如果你每天再水…

Java命令行界面(第22部分):argparser

John Lloyd的argparser是本系列的第二十二篇有关基于Java的命令行参数解析的文章中介绍的库。 该库的主页除了提供单个源代码示例外&#xff0c;还提供了指向基于Javadoc的API文档 &#xff0c;JAR文件&#xff0c;ZIP文件和TAR文件的链接。 本帖子中使用的示例与本系列的前二十…

python中布尔类型的值包括0和1_Python中布尔型变量的值为0和1。( )

【单选题】以下哪个不能作为字典的键。【多选题】以下哪些元素是可变序列。【单选题】已知 x[1,2,3,4,5,6,7],执行语句x.pop()的结果是()。【多选题】以下哪几个可以作为字典的键。【单选题】以下哪个属于列表的定界符。【多选题】以下哪几个选项类型属于元组。【单选题】下面代…

如何粗暴地下载huggingface_hub指定数据文件

参考这里&#xff1a; https://huggingface.co/docs/huggingface_hub/guides/download 可见下载单个文件&#xff0c;下载整个仓库文件都是可行的。 这是使用snapshot_download下载的一个例子&#xff1a; https://qq742971636.blog.csdn.net/article/details/135150482 sn…

顺序表输入栈元素c语言,C语言数据结构之栈简单操作

C语言数据结构之栈简单操作实验&#xff1a;编写一个程序实现顺序栈的各种基本运算&#xff0c;并在此基础上设计一个主程序&#xff0c;完成如下功能&#xff1a;(1)初始化顺序栈(2)插入元素(3)删除栈顶元素(4)取栈顶元素(5)遍历顺序栈(6)置空顺序栈分析:栈的顺序存储结构简称…

rete_Rete之外的生活– RIP Rete 2013 :)

rete我只是对我的新算法做最后的修改。 它融合了Leaps &#xff0c; 面向集合的Match和Left / Right取消链接的概念 &#xff0c;以及我自己的一些想法。 该代码已提交&#xff0c;但我正在积累工作并编写更多测试。 我将在一周左右的时间内写一个完整的博客&#xff0c;详细介…

25q64存储多个数据_一篇文章看懂,存储虚拟化在不同用例中的实践与优势

存储虚拟化是一种对物理存储资源进行抽象的技术&#xff0c;使其看起来像是一个集中的资源。虚拟化掩盖了管理内存、网络、服务器和存储中资源的复杂性。存储虚拟化运行在多个存储设备上&#xff0c;使它们看起来就像一个单一的存储池。这些池化的存储设备可以来自不同的供应商…

android代码画出波浪球,Android绘制波浪曲线,效果很赞的。

github地址&#xff1a;https://github.com/sddyljsx/Android-SurfView-WaveViewpackage neal.canvas;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import and…

Java命令行界面(第14部分):google-options

google-options的GitHub页面指出google-options是“来自Google&#xff08;java&#xff09;的人们的命令行参数解析库。” 该页面继续说&#xff1a;“这是Bazel Project中的命令行参数解析器。 com.google.devtools.common.options程序包已拆分为一个单独的jar&#xff0c;用…

python自动化工具哪个好用_10款好用的自动化测试工具推荐

当我们功能测试干的时间比较久了,或者想要学习更多的技术,提升自己的时候,基本上第一时间就会想到的是自动化测试。而在自动化测试领域&#xff0c;自动化工具的核心地位毋庸置疑&#xff0c;下面为大家推荐10款常见常用的自动化测试工具&#xff1a;1、SeleniumWEB自动化测试S…

android 输入法文本选择功能,Android的文本和输入---创建输入法(一)

输入法编辑器(IME)是让用户输入文本的控件。Android提供了一个可扩展的的输入法的框架&#xff0c;它允许应用程序给用户提供另外的输入法&#xff0c;如软键盘或语音输入。这些输入法一旦安装&#xff0c;用户就可以从系统的设置中选择他们想要使用的IME&#xff0c;并且这个设…

python基础list_python基础操作---list

1 #coding:utf-82 list1 [physics, chemistry, 1997, 2000];3 list2 [1, 2, 3, 4, 5 ];4 list3 ["a", "b", "c", "d"];56 #切片功能跟str一样7 print "list1[0]: ", list1[0]8 print "list2[1:5]: ", list2[1:…