Flink本地IDEA运行时如何加载plugins
软件版本
flink: 1.16.1
插件: flink-s3-fs-hadoop-1.16.1.jar
plugins与lib的区别
插件通过受限的类加载器实现代码隔离。插件无法访问其他插件或未列入白名单的 Flink 的类。因此这种严格的隔离允许插件包含同一库的冲突版本,而无需重新定位类或收敛到通用版本。
以flink-s3-fs-hadoop为例的以shade方式打包的插件,依赖的第三方库会被一并打包到jar包中,如果在maven中引用了该jar,那么大概率会产生严重的jar包冲突。
flink文档关于plugins的描述:
在IDEA中本地调试的方法
-
在 " Run -> Run/Debug Configurations -> Environment Vaiables" 中添加FLINK_PLUGINS_DIR环境变量用于查找插件所在的目录。
这个环境变量是可选的,默认路径为项目根目录下的plugins文件夹。
环境变量: FLINK_PLUGINS_DIR
org.apache.flink.core.plugin.PluginConfig 加载plugins的源码:
public static PluginConfig fromConfiguration(Configuration configuration) { return new PluginConfig( getPluginsDir().map(File::toPath), CoreOpt