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

回复