java - 使用 Maven 处理依赖 hell 的系统方法

标签 java maven intellij-idea pom.xml maven-dependency

我正在努力解决如何处理 jar 依赖 hell 。我有一个使用一些 aws sdk 的 Maven-IntelliJ Scala 项目。最近添加的 kinesis sdk 引入了不兼容的 Jackson 版本。

我的问题是 : 我如何系统地处理 Jar hell 的问题?

我了解类加载器以及 maven 如何在重复的 Jars 之间进行选择,但对于解决该问题的实际实际步骤,我仍然一头雾水。

我目前的尝试是基于反复试验,我在这里用 jackson 的例子来概述:

  • 首先,我看到 Jackson 数据绑定(bind) ObjectMapper 类上的实际异常是什么,在本例中为 NoSuchMethodError。然后,我查看 Jackson 文档以查看添加或删除该方法的时间。这通常很乏味,因为我手动检查每个版本的 api 文档 (问题一:有没有更好的办法?) .
  • 然后,我使用 mvn dependency:tree找出我实际使用的是哪个版本的 Jackson (问题 2:有没有一种自动的方式来询问 maven 正在使用哪个版本的 jar,而不是梳理树输出?) .
  • 最后,我比较了mvn dependency:tree添加 Kinesis SDK 之前和之后的输出,以检测 mvn dependency:tree 中的差异输出,并希望看看 jackson 版本是否改变。 (问题 3:当依赖解析发生时,maven 如何使用阴影 jar 中的库?和其他一样吗?) .

  • 最后,在比较树输出之后,我尝试在 POM 中显式添加 Jackson 的最新工作版本,以触发 maven 依赖解析链中的优先级。如果最新的不起作用,我添加下一个最新的库,依此类推。

    整个过程非常繁琐。除了我提出的具体问题外,我也很好奇其他人对这个问题的系统方法。有没有人有他们使用的任何资源?

    最佳答案

    使用Maven Helper plugin通过排除旧版本的依赖项来轻松解决所有冲突。

    关于java - 使用 Maven 处理依赖 hell 的系统方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33907162/

    相关文章:

    java - 从 map 瓦片构建级别包文件以用于 libGDX

    java - 在哪里可以找到我的日志文件?

    Java android BaseAdapter - 如何在适配器的特定位置的 TextView 中设置文本?

    maven - 创建 '--rsyncable' maven 程序集

    java - v4 androidmanifest.xml 文件未找到

    java - 复制 LinkedQueue

    java - 为生成的类添加 @XmlRootElement 注释后,我无法在源类中访问它们

    maven - Tomcat VirtualWebappLoader 停止为 Java 类工作

    spring - Intellij,Spring 开发工具远程,Docker,错误意外的 404 响应上传类文件

    java - 使用 Intellij 在远程服务器上部署/调试 Java 代码