我在IntelliJ中测试了我的数据流java应用程序,它运行得非常好。但是,当在linux系统中运行数据流jar文件时,出现了以下问题:

这是我用于数据流的选项:--project=myproject --stagingLocation=gs://mybucket/staging2 --tempLocation=gs://mybucket/gcp-temp2 --gcpTempLocation=gs://mybucket/gcp-temp2 --bigtableProjectId=myinstance --bigtableInstanceId=user-test --bigtableTableId=test_table1
因此,问题是gs目录没有被正确识别。实际上,它被认为是我运行jar文件的服务器的本地目录。
以下是出现此目录问题的原因:


我查找了maven程序集jar与maven树荫jar之间的区别,发现FileSystemRefistrar指向了错误的文件。
但是使用阴影插件并不能解决这个问题,我只是幸运的是,这个类是GcsFileSystemRegistrar没有被覆盖。当我更改依赖项顺序时,同样的问题再次发生。
要做到这一点,我必须将这两个库按以下顺序排列:
束流运行程序-google-cloud-dataflow java 光束-sdks java-核心
‘beam java-core’包含在‘波束运行-运行-谷歌-云-数据流-java’之后,但我需要在‘波束运行-运行-谷歌-云-数据流-java’之后添加它。所以dependencyHierarchy看起来很有趣,但这是我唯一能让它工作的方法。以下是它的外观:

如果我不包括“beam java-core”或更改顺序,问题就会再次发生。我试图排除它使用maven插件,但它没有工作。
因此,我的问题是如何正确设置FileSystemRegistrar?我不知道为什么会这样。
我希望任何有这个问题的人都能从这篇文章中得到一些提示。我从这件事中挣扎了很多:
发布于 2018-04-04 15:57:21
正如OGCheeze所评论的,它是通过使用ServicesResourceTransformer的maven阴影插件来解决的。在this post中有更详细的解释。
https://stackoverflow.com/questions/49397775
复制相似问题