我近期尝试使用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的类生效么? 这显然不是一个优雅的解决方案,是否有其它更好的方案?