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
  • 相关阅读:
    细节问题
    慕课 python 操作数据库
    转 Python爬虫入门七之正则表达式
    转 python面试题
    转 Perl函数返回值用法指导
    慕课爬虫实战 爬取百度百科Python词条相关1000个页面数据
    慕课爬虫
    转 Python爬虫入门五之URLError异常处理
    转 廖雪峰 urllib
    转 Python爬虫入门四之Urllib库的高级用法
  • 原文地址:https://www.cnblogs.com/flashsun/p/13517793.html
Copyright © 2011-2022 走看看