Apache Beam:无法找到 gs 的注册商
Apache Beam: Unable to find registrar for gs
Beam 同时使用了 Google 的 auto/value and auto/service 工具。
我想 运行 一个带有 Dataflow 运行 的管道,数据存储在 Google Cloud Storage 上。
我添加了一个依赖:
<dependency>
<groupId>org.apache.beam</groupId>
<artifactId>beam-runners-google-cloud-dataflow-java</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.beam</groupId>
<artifactId>beam-sdks-java-extensions-google-cloud-platform-core</artifactId>
<version>2.0.0</version>
</dependency>
我能够从 IntelliJ 启动管道。但是当通过 mvn package
和 运行 和 java -jar
编译 jar 时,它会抛出一个错误:
java.lang.IllegalStateException: Unable to find registrar for gs
fatjar 是用 maven-assembly-plugin
打包的。 GcsFileSystemRegistrar
class 在罐子里。
问题在于您构建 fatjar 的方式。 maven-assembly-plugin
没有正确处理与 ServiceLoader
关联的文件。 ServiceLoader
依赖于每个实现的 META-INF/services/org.apache.beam.sdk.io.FileSystemRegistrar
中列出的条目,以便 Java 知道如何找到它们。
您的 fatjar 中 META-INF/services/org.apache.beam.sdk.io.FileSystemRegistrar
的内容可能只有:
org.apache.beam.sdk.io.LocalFileSystemRegistrar
您需要列出它(以及您想要的任何其他实现):
org.apache.beam.sdk.io.LocalFileSystemRegistrar
org.apache.beam.sdk.extensions.gcp.storage.GcsFileSystemRegistrar
您最好的选择是使用理解这些 ServiceLoader
要求的工具,例如 maven-shade-plugin
当配置为使用 ServicesResourceTransformer 构建您的 fatjar 时。
这看起来像是装配策略的问题,您应该 accumulate/merge org.apache.beam.sdk.io.FileSystemRegistrar
的服务。有关类似问题的更多信息 here.
Beam 同时使用了 Google 的 auto/value and auto/service 工具。
我想 运行 一个带有 Dataflow 运行 的管道,数据存储在 Google Cloud Storage 上。
我添加了一个依赖:
<dependency>
<groupId>org.apache.beam</groupId>
<artifactId>beam-runners-google-cloud-dataflow-java</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.beam</groupId>
<artifactId>beam-sdks-java-extensions-google-cloud-platform-core</artifactId>
<version>2.0.0</version>
</dependency>
我能够从 IntelliJ 启动管道。但是当通过 mvn package
和 运行 和 java -jar
编译 jar 时,它会抛出一个错误:
java.lang.IllegalStateException: Unable to find registrar for gs
fatjar 是用 maven-assembly-plugin
打包的。 GcsFileSystemRegistrar
class 在罐子里。
问题在于您构建 fatjar 的方式。 maven-assembly-plugin
没有正确处理与 ServiceLoader
关联的文件。 ServiceLoader
依赖于每个实现的 META-INF/services/org.apache.beam.sdk.io.FileSystemRegistrar
中列出的条目,以便 Java 知道如何找到它们。
您的 fatjar 中 META-INF/services/org.apache.beam.sdk.io.FileSystemRegistrar
的内容可能只有:
org.apache.beam.sdk.io.LocalFileSystemRegistrar
您需要列出它(以及您想要的任何其他实现):
org.apache.beam.sdk.io.LocalFileSystemRegistrar
org.apache.beam.sdk.extensions.gcp.storage.GcsFileSystemRegistrar
您最好的选择是使用理解这些 ServiceLoader
要求的工具,例如 maven-shade-plugin
当配置为使用 ServicesResourceTransformer 构建您的 fatjar 时。
这看起来像是装配策略的问题,您应该 accumulate/merge org.apache.beam.sdk.io.FileSystemRegistrar
的服务。有关类似问题的更多信息 here.