FileSystemRefistrar

时间:2018-03-21 03:41:13

标签: maven jar google-cloud-platform dataflow

我在IntelliJ中测试了我的数据流java应用程序,它运行得很好。但是当在linux系统中运行数据流jar文件时,出现了这个问题: dataflow error log

这是我用于数据流的选项: --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文件的服务器的本地目录。

以下是出现此目录问题的原因:

jar file using assembly

jar file using shade

我找了[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看起来很有趣,但这是我能让它工作的唯一方法。以下是它的外观:

pom dependency

如果我排除' beam-sdks-java-core'或更改顺序,问题再次发生。我尝试使用maven插件排除它,但它没有用。

所以我的问题是如何正确设置FileSystemRegistrar?我不知道为什么会这样。

+我希望如果有这个问题的人可能会从这篇文章中得到一些暗示。我从中挣扎了很多:'(

1 个答案:

答案 0 :(得分:0)

正如OGCheeze评论的那样,它是通过使用带有ServicesResourceTransformer的maven shade插件来解决的。在this post 有更详细的解释。