Нет переупакованных зависимостей при сборке Apache Beam Cassandra JAR

#java #gradle #cassandra #guava #apache-beam

#java #gradle #cassandra #guava #apache-beam

Вопрос:

Пытаюсь скомпилировать и использовать снимок для Apache Beam Cassandra JAR. Похоже, что сборка не упаковывает зависимости Guava в JAR. Это приводит к сбою компиляции, когда JAR используется другим кодом — смотрите следующее исключение:

 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/beam/vendor/guava/v20_0/com/google/common/base/Preconditions
    at org.apache.beam.sdk.io.cassandra.CassandraIO$Read.withHosts(CassandraIO.java:180)
    at org.apache.beam.examples.JoinFromCassandraToCassandra.main(JoinFromCassandraToCassandra.java:26)
Caused by: java.lang.ClassNotFoundException: org.apache.beam.vendor.guava.v20_0.com.google.common.base.Preconditions
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 2 more
  

Я все равно не смог найти, чтобы сделать пакет сборки gradle необходимым для зависимостей в JAR.

Сборка с помощью команды:

 gradle -p ./sdks/java/io/cassandra shadowJar
  

Кто-нибудь знает, как это можно сделать?

ОБНОВЛЕНИЕ: Итак, по-видимому, несколько месяцев назад способ, которым Beam использует Guava, изменился. github.com/apache/beam/pull/7494 — Поэтому, когда я собираю последнюю версию локально, она не может найти org.apache.beam.vendor.guava.v20_0.com.google.common, импортированный org.apache.beam.sdk.options.PipelineOptionsFactory

Комментарии:

1. ОБНОВЛЕНИЕ: Итак, по-видимому, несколько месяцев назад способ, которым Beam использует Guava, изменился. github.com/apache/beam/pull/7494 — Поэтому, когда я создаю последнюю версию локально, она не может найти, org.apache.beam.vendor.guava.v20_0.com.google.common импортированную org.apache.beam.sdk.options.PipelineOptionsFactory .

Ответ №1:

Итак, похоже, вам нужно добавить следующие зависимости, чтобы заставить его работать в последней версии. Надеюсь, это кому-то поможет.


compile group: 'org.apache.beam', name: 'beam-vendor-guava-20_0', version: '0.1'
compile group: 'org.apache.beam', name: 'beam-vendor-grpc-1_13_1', version: '0.2'