Как переопределить метод в Uber JAR?
Я пытаюсь использовать этот код в Google Cloud Datastore:
Query<Entity> query = Query.entityQueryBuilder()
.kind("Task")
.filter(PropertyFilter.hasAncestor(
datastore.newKeyFactory().kind("TaskList").newKey("default")))
.build();
datastore.run(query, ReadOption.eventualConsistency());
Я получаю эту ошибку:
Исключение в потоке "main" java.lang.VerifyError: class com.google.datastore.v1.ReadOptions$Builder переопределяет последний метод mergeUnknownFields.(Lcom/google/protobuf/UnknownFieldSet;)Lcom/google/protobuf/GeneratedMessage$Builder; в java.lang.ClassLoader.defineClass1(собственный метод) в java.lang.ClassLoader.defineClass(ClassLoader.java:763) в java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) в java.neto.deflass. (URLClassLoader.java:467) на java.net.URLClassLoader.access$100(URLClassLoader.java:73) на java.net.URLClassLoader$1.run(URLClassLoader.java:368) на java.net.URLClassLoader $ 1.run (URLClass.java:362) в java.security.AccessController.doPrivileged(собственный метод) в java.net.URLClassLoader.findClass(URLClassLoader.java:361) в java.lang.ClassLoader.loadClass(ClassLoader.java:424) в java.lang.ClassLoader.loadClass(ClassLoader.java:357) в com.google.datastore.v1.ReadOptions.toBuilder(ReadOptions.java:392) в com.google.datastore.v1.ReadOptions.newBuilder(ReadOptions.java:386) на com.google.cloud.datastore.DatastoreImpl.toReadOptionsPb(DatastoreImpl.java:217) на com.google.cloud.datastore.DatastoreImpl.run(DatastoreImpl.java:78)
Некоторые общие детали:
- Язык: скала
- Запустить на: Google Compute Engine
- Использование com.google.guava:guava:19.0 и com.google.cloud:google-cloud:0.3.0 зависимостей
Это код из google.datastore.v1.protos
public final Builder mergeUnknownFields (final com.google.protobuf.UnknownFieldSet unknownFields) {вернуть это; }
это код из com.google.protobuf.GeneratedMessage
public BuilderType mergeUnknownFields(UnknownFieldSet unknownFields) { this.unknownFields = UnknownFieldSet.newBuilder(this.unknownFields).mergeFrom(unknownFields).build(); this.onChanged(); return this; }
`
2 ответа
Добавление затененных зависимостей решило проблему с конфликтом API клиента Google / Google Cloud с помощью:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<relocations>
<relocation>
<pattern>com.google</pattern>
<shadedPattern>shaded.com.google</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>
Я считаю, что это является симптомом проблем, описанных в этом выпуске.