Exception in thread "main" java.lang.NoSuchMethodError: java.nio.ByteBuffer.rewind()Ljava/nio/ByteBuffer;
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?
jdk21 is normal jdk8 is not support?
https://www.morling.dev/blog/bytebuffer-and-the-dreaded-nosuchmethoderror/
this is a java compilation bug need to be fixed.
@onestow would you mind fix that?
I'm sorry, but I haven't had time for anything else recently v_v
/assign @yhmo could you help on it?
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.
check the link
...
maven.compiler.release doesn't resolve this issue.
I tested on my local.
-
compile sdk with openjdk 1.8 and language level 8 run client with openjdk 1.8 and language level 8, the ByteBuffer works fine run client with openjdk 11 and language level 8, the ByteBuffer works fine
-
compile sdk with openjdk 11 and language level 8 run client with openjdk 1.8 and language level 8, get NoSuchMethod error of ByteBuffer such as rewind()/position() run client with openjdk 11 and language level 8, the ByteBuffer works fine
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.