2016-10-13 2 views
0

Я создаю компонент в Java/Maven, который вытаскивает сообщение из подписки на Google PubSub, извлекает из него изображение Google Cloud Storage и вызывает Google Cloud Vision на образ. Я смог заставить PubSub работать изолированно, а компонент Cloud Vision функционировал изолированно. Однако, когда я пытаюсь запустить их вместе, я получаю следующее сообщение об ошибке:Конфликты с Google PubSub и Google Cloud Vision в том же проекте

java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:294) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.NoSuchMethodError: com.google.common.util.concurrent.Futures.catching(Lcom/google/common/util/concurrent/ListenableFuture;Ljava/lang/Class;Lcom/google/common/base/Function;)Lcom/google/common/util/concurrent/ListenableFuture; 
    at com.google.cloud.pubsub.spi.DefaultPubSubRpc.translate(DefaultPubSubRpc.java:168) 
    at com.google.cloud.pubsub.spi.DefaultPubSubRpc.pull(DefaultPubSubRpc.java:251) 
    at com.google.cloud.pubsub.PubSubImpl.pullAsync(PubSubImpl.java:491) 
    at com.google.cloud.pubsub.PubSubImpl.pull(PubSubImpl.java:481) 
    at xyz.wingman.face_image.GoogleVision.main(GoogleVision.java:68) 
    ... 6 more 

Это второй проект это произошло; первый был аналогичным конфликтом между PubSub и Firebase. На основании своих исследований, это, кажется, конфликт транзитивной зависимости в версиях гуавы, но я застрял на том, как структурировать pom.xml, чтобы избежать этого конфликта (если это действительно причина):

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.skroot.image_face</groupId> 
    <artifactId>gcloud-test</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>gcloud-test</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>exec-maven-plugin</artifactId> 
     <version>1.5.0</version> 
     <configuration> 
      <mainClass>com.skroot.image_face.GoogleVision</mainClass> 
     </configuration> 
     </plugin> 
     <plugin> 
     <!-- Build an executable JAR --> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <version>3.0.2</version> 
     <configuration> 
      <archive> 
      <manifest> 
       <addClasspath>true</addClasspath> 
       <classpathPrefix>lib/</classpathPrefix> 
       <mainClass>com.skroot.image_face.GoogleVision</mainClass> 
      </manifest> 
      </archive> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 

    <dependencies> 
    <!-- https://mvnrepository.com/artifact/com.google.cloud.dataflow/google-cloud-dataflow-java-sdk-all --> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.12</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.google.protobuf</groupId> 
     <artifactId>protobuf-java-util</artifactId> 
     <version>3.0.2</version> 
    </dependency> 
    <dependency> 
     <groupId>com.google.cloud.dataflow</groupId> 
     <artifactId>google-cloud-dataflow-java-sdk-all</artifactId> 
     <version>1.8.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hamcrest</groupId> 
     <artifactId>hamcrest-all</artifactId> 
     <version>1.3</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.skroot</groupId> 
     <artifactId>image_face</artifactId> 
     <version>0.1.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.google.cloud</groupId> 
     <artifactId>google-cloud</artifactId> 
     <version>0.3.0</version> 
     <exclusions> 
     <exclusion> 
      <groupId>io.netty</groupId> 
      <artifactId>netty-codec-http2</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>io.grpc</groupId> 
      <artifactId>grpc-core</artifactId> 
     </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>com.google.cloud</groupId> 
     <artifactId>google-cloud-pubsub</artifactId> 
     <version>0.3.0</version> 
     <exclusions> 
     <exclusion> 
      <groupId>io.netty</groupId> 
      <artifactId>netty-codec-http2</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>io.grpc</groupId> 
      <artifactId>grpc-core</artifactId> 
     </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>com.google.api-client</groupId> 
     <artifactId>google-api-client</artifactId> 
     <version>1.22.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.google.apis</groupId> 
     <artifactId>google-api-services-vision</artifactId> 
     <version>v1-rev25-1.22.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.google.protobuf</groupId> 
     <artifactId>protobuf-java</artifactId> 
     <version>3.0.2</version> 
    </dependency> 
    </dependencies> 
</project> 

ответ

0

Я решил это, добавление глобального исключения к pom.xml, за исключением com.google.guava/guava-jdk5.

Смежные вопросы