因此,我有一个通用的后端服务器,该服务器将着色的jar加载到内存中,然后通过自定义的Classloader加载。
例如
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加载类时,是否有办法确保已使用阴影的依赖项?
答案 0 :(得分:0)
这里的问题是,当从有阴影的jar加载类时,是否有办法确保已使用阴影的依赖项?
如果使用默认的Class loader,则解析顺序将作为classpath的顺序。在您的代码中,您可以使用
System.out.println(System.getProperty("system.class.path").replaceAll(":", "\n"));
并检查类路径。通常,此类运行时环境(例如apache spark)具有这样的features,以允许您在类路径之前添加。您可以在运行时服务器环境中检查该功能。