zoukankan      html  css  js  c++  java
  • 用最简单的一个例子看maven冲突的解决办法

    一共四个module

    • conflict-main 1.0
    • conflict-a 1.0
    • conflict-b 1.0
    • conflict-b 2.0

    依赖关系

    • conflict-main 1.0 → conflict-a 1.0,conflict-b 2.0
    • conflict-a 1.0 → conflict-b 1.0

    代码

    conflict-main 1.0

    public static void main(String[] args) {
        AClass.callB2Method();
    }
     

    conflict-a 1.0

    public class AClass{
        public static void callB2Method() {
            BClass.method2();
        }
    }
     

    conflict-b 1.0

    public class BClass{
        public static void method1() {
            sout("method1");
        }
        @Deprecated
        public static void method2() {
            sout("method2");
        }
    }
     

    conflict-b 2.0

    public class BClass{
        public static void method1() {
            sout("method1");
        }
    }
     

    报错

    java.lang.NoSuchMethodError: com.flash.conflict.b.BClass.method2()V

    相应的如果缺少类则会报如下错误(不再列出)

    • java.lang.NoClassDefFoundError(直接 new 一个不存在的类)
    • java.lang.ClassNotFoundException(Class.forName 等方式加载一个不存在的类)

    原因

    • conflict-a 1.0 → conflict-b 1.0 有 method2 方法
    • conflict-main 1.0 → conflict-a 1.0,conflict-b 2.0 就近原则,取 b 的 version2 版本,无 method2 方法

    解决办法

    此处直接删除 conflict-main 1.0 → conflict-a 1.0,conflict-b 2.0 依赖即可

    因为这只是一层所以直接删除,如果是很多层级的,就要考虑 exclude

    总结

    • 运行时找不到方法:NoSuchMethodError
    • 运行时找不到类(直接new一个不存在的类):NoClassDefFoundError
    • 运行时找不到类(Class.forName等方式加载一个不存在的类):ClassNotFoundException
  • 相关阅读:
    Maven私服安装
    Maven运行的方式
    Maven传递依赖的范围
    Maven子模块
    Maven父工程
    Maven项目指定JDK版本
    Maven传递依懒
    Maven概念模型
    Swift -欢迎界面1页, 延长启动图片的显示时间(LaunchImage)
    Swift
  • 原文地址:https://www.cnblogs.com/flashsun/p/13517793.html
Copyright © 2011-2022 走看看