我近期尝试使用Java11版本的Flink。

之前的代码实现中,我需要修改一些读取文件的逻辑,所以在包`package
org.apache.flink.connector.file.src.impl;`下实现了一个自己的类`XXXFileSourceReader`,因为我需要访问一些不是public的类,如`FileSourceRecordEmitter`等。这个类会在`XXXFileSource`的createReader方法调用时被创建(即在TaskManager中)。

但当使用jdk11环境运行作业时(local),会提示(我尝试过将类加载器修改为parent-first,依旧会有这个报错):
```
failed to access class
org.apache.flink.connector.file.src.impl.FileSourceRecordEmitter from class
org.apache.flink.connector.file.src.impl.XXXFileSourceReader
(org.apache.flink.connector.file.src.impl.FileSourceRecordEmitter is in
unnamed module of loader 'app';
org.apache.flink.connector.file.src.impl.XXXFileSourceReader is in unnamed
module of loader
org.apache.flink.util.FlinkUserCodeClassLoaders$ParentFirstClassLoader
```

我查阅资料,这应该是JDK引入的module机制导致的,我尝试后发现将`connector-files`从lib中移除,并将其打入user-jar中可以避免这个问题。

这种保护是只对非public的类生效么?

这显然不是一个优雅的解决方案,是否有其它更好的方案?

回复