如何将Apache Beam Direct Runner添加到classpath中?
问题解决方法
根因定位
你当前POM文件中beam-runners-direct-java依赖的<scope>test</scope>配置错误,该范围限制了依赖仅在测试代码执行时加入类路径,主程序的main方法运行时不会加载该依赖,因此报DirectRunner找不到的错误。
修复方案
方案1:修改依赖范围(最简便)
将beam-runners-direct-java的依赖配置中的<scope>test</scope>行删除,或者修改为<scope>runtime</scope>,修改后的依赖配置如下:
<dependency> <groupId>org.apache.beam</groupId> <artifactId>beam-runners-direct-java</artifactId> <version>2.33.0</version> <scope>runtime</scope> </dependency>
修改后重新执行mvn clean install刷新依赖即可。
方案2:代码显式指定Runner(补充方案)
也可以在初始化PipelineOptions的时候手动指定Runner类,避免自动查找失败:
PipelineOptions options = PipelineOptionsFactory.create(); // 显式设置DirectRunner options.setRunner(DirectRunner.class); Pipeline p = Pipeline.create(options);
注意:该方案仍需保证DirectRunner依赖在运行时类路径中,所以仍需先处理依赖范围配置问题。
验证方法
修改后重新运行主程序,不再提示找不到DirectRunner的报错即修复成功。
内容的提问来源于stack exchange,提问作者rocksNwaves
相关产品推荐
相关产品推荐

