Hi, 有试过直接修改file connector FileSourceRecordEmitter,然后打一个包么?(相当于自定义file connector)
-- Best! Xuyang 在 2024-12-10 10:49:46,"Smokeriu" <smoke...@gmail.com> 写道: >我近期尝试使用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的类生效么? > >这显然不是一个优雅的解决方案,是否有其它更好的方案?