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
  • 相关阅读:
    希尔排序
    代理模式
    快速排序
    插入排序
    各种排序算法的稳定性和复杂度
    简单选择排序
    冒泡排序
    流程图
    PLAY学习【未完】
    项目之maven心得
  • 原文地址:https://www.cnblogs.com/flashsun/p/13517793.html
Copyright © 2011-2022 走看看