【问题标题】:Resolving to correct dependencies when loading classes with custom classloaders在使用自定义类加载器加载类时解决正确的依赖关系
【发布时间】:2019-12-29 18:10:04
【问题描述】:

所以我有这个通用后端服务器,它在内存中加载阴影 jar,然后通过自定义类加载器加载它。

例如

MyClass class = c.newInstance();

在阴影 Jar 依赖项与服务器类冲突之前,它可以正常工作。

例如

服务器包含(带有自定义类加载器):

com.fasterxml.jackson.jackson-databind:2.6.0

虽然有阴影的罐子包含

com.fasterxml.jackson.jackson-databind:2.9.9

当类中的方法需要所述库时,例如class.doSomeThing(); 它抛出一个错误 Caused by java.lang.NoSuchFieldError: 因为加载了 jackson-databind is 2.6.0 而不是 2.9.9

这里的问题是,当从阴影 jar 加载类时,是否有办法确保使用阴影依赖项?

【问题讨论】:

    标签: java


    【解决方案1】:

    这里的问题是,当从阴影 jar 加载类时,是否有办法确保使用阴影依赖项?

    如果您使用默认的类加载器,则解析顺序将作为类路径的顺序。在您的代码中,您可以使用

    System.out.println(System.getProperty("system.class.path").replaceAll(":", "\n"));
    

    并检查类路径。通常这样的运行时环境(例如 apache spark)有这样的features 以允许您预先添加类路径。您可以检查您的运行时服务器环境以获得此类功能。

    【讨论】:

      猜你喜欢
      • 2012-10-30
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多