我在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 assembly jar]和[maven shade jar]之间的区别,发现FileSystemRefistrar指的是错误的文件。
但是使用shade插件并不能解决这个问题,我很幸运,GcsFileSystemRegistrar这个类没有被覆盖。当我更改依赖顺序时,会再次出现同样的问题。
为了使这项工作,我必须按顺序拥有这两个库:
beam-runners-google-cloud-dataflow-java
beam-sdks-java-core
'射束的SDK-java的核心'包含在' beam-runners-google-cloud-dataflow-java'但是我需要在' beam-runners-google-cloud-dataflow-java'之后添加它。所以dependencyHierarchy看起来很有趣,但这是我能让它工作的唯一方法。以下是它的外观:
如果我排除' beam-sdks-java-core'或更改顺序,问题再次发生。我尝试使用maven插件排除它,但它没有用。
所以我的问题是如何正确设置FileSystemRegistrar?我不知道为什么会这样。
+我希望如果有这个问题的人可能会从这篇文章中得到一些暗示。我从中挣扎了很多:'(
答案 0 :(得分:0)
正如OGCheeze评论的那样,它是通过使用带有ServicesResourceTransformer的maven shade插件来解决的。在this post 有更详细的解释。