Poison

Relocating Classes

关于重定位类,笔者初次接触是在编写 Spark 应用时遇到,当时业务应用需要用到一个高版本的 guava 依赖,而 Spark 内置依赖了低版本的 guava,根据 JVM 默认的类加载顺序,Spark 内置依赖的 guava 依赖优先于业务依赖的 guava 版本,导致业务应用出现找不到方法的异常,后通过 Relocating Classes 将指定的包名进行调整以规避同一个应用域中需要加载不同版本相同类名的问题。

最近编写 Flink 应用也遇到了类似的问题,Flink 官方文档给出了多种方案,其中也包括了上面提到的使用 maven-shade-plugin 对类进行重定位,也提到了 Flink 的反向类加载机制,可以参考下相关文档。

References

Debugging Classloading