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
  • 相关阅读:
    170322操作系统定义、功能、位置与历史
    java 多线程
    java 网络编程TCP程序设计
    java 事件处理机制
    java GUI编程
    170321php3第4章 PHP5的基本语法+作业九九乘法表
    170320网络编程 udpclient udpGroupClient
    二叉树线索化
    哈希表
    二叉搜索树
  • 原文地址:https://www.cnblogs.com/flashsun/p/13517793.html
Copyright © 2011-2022 走看看