milvus-io / milvus-sdk-java

Java SDK for Milvus.
https://milvus.io
Apache License 2.0
380 stars 153 forks source link

Exception in thread "main" java.lang.NoSuchMethodError: java.nio.ByteBuffer.rewind()Ljava/nio/ByteBuffer; #877

Open onestow opened 4 months ago

onestow commented 4 months ago

My JDK version is 1.8, milvus-sdk-java version is 2.4.0, when I run SearchResultsWrapper.getIDScore, and I got the exception:

Exception in thread "main" java.lang.NoSuchMethodError: java.nio.ByteBuffer.rewind()Ljava/nio/ByteBuffer;
    at io.milvus.response.FieldDataWrapper.getFieldData(FieldDataWrapper.java:248)
    at io.milvus.response.FieldDataWrapper.valueByIdx(FieldDataWrapper.java:351)
    at io.milvus.response.SearchResultsWrapper.getIDScore(SearchResultsWrapper.java:207)
    at com.tom.MilvusTest.myTest(MilvusTest.java:190)
    at com.tom.MilvusTest.main(MilvusTest.java:114)

how to solve it?

onestow commented 4 months ago

jdk21 is normal jdk8 is not support?

xiaofan-luan commented 4 months ago

https://www.morling.dev/blog/bytebuffer-and-the-dreaded-nosuchmethoderror/

xiaofan-luan commented 4 months ago

this is a java compilation bug need to be fixed.

@onestow would you mind fix that?

onestow commented 4 months ago

I'm sorry, but I haven't had time for anything else recently v_v

xiaofan-luan commented 4 months ago

/assign @yhmo could you help on it?

yhmo commented 4 months ago

Java SDK is compiled by openjdk 11 with language level 8. Seems this is an issue of ByteBuffer. If it cannot run under jdk 1.8, try use jdk 11 instead. I need to install 1.8 to test the issue first, I am not sure is any quick solution there.

xiaofan-luan commented 4 months ago

check the link

...

8

...

yhmo commented 4 months ago

maven.compiler.release doesn't resolve this issue.

I tested on my local.

yhmo commented 4 months ago

A possible solution is: compile the SDK with OpenJDK 1.8 and language level 8 from the next version.

There is a potential problem: seems the tensorflow-core-platform could not work under openjdk 1.8. (Currently, we use this lib for Float16Vector examples).

java: cannot access org.tensorflow.ndarray.buffer.ByteDataBuffer
  bad class file: /home/yhmo/.m2/repository/org/tensorflow/ndarray/0.4.0/ndarray-0.4.0.jar!/org/tensorflow/ndarray/buffer/ByteDataBuffer.class
    class file has wrong version 55.0, should be 52.0
    Please remove or make sure it appears in the correct subdirectory of the classpath.