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
  • 相关阅读:
    Redhat as 版本下启用 Telnet 和 FTP 服务
    Eclipse中设置编码的方式
    rhel3上安装Oracle(来自Oracle网站)
    home/end的快捷键~
    Red Hat Linux 9中文本模式与图形模式的切换
    Highcharts:非常漂亮的图表API
    Linux裸设备总结(ZT)
    Red Hat Linux操作系统下从文本模式切换到图形模式的方法
    pear
    Java中的asList
  • 原文地址:https://www.cnblogs.com/flashsun/p/13517793.html
Copyright © 2011-2022 走看看