Git Product home page Git Product logo

Comments (9)

saudet avatar saudet commented on May 21, 2024

It comes from that artifact you point out:
https://github.com/tensorflow/java/blob/master/tensorflow-core/tensorflow-core-api/pom.xml#L23-L27

from java.

aday00 avatar aday00 commented on May 21, 2024

Thanks @saudet ! I think I'm missing something fundamental. Please advise where might the bytedeco Pointer.class might be, to fix my java.lang.NoClassDefFoundError: org/bytedeco/javacpp/Pointer? None of these are it:

tensorflow-java$ find . -name '*class'|grep Pointer
./tensorflow-core/tensorflow-core-api/target/classes/org/tensorflow/internal/c_api/Delete_func_Pointer.class
./tensorflow-core/tensorflow-core-api/target/classes/org/tensorflow/internal/c_api/TF_Buffer$Data_deallocator_Pointer_long.class
./tensorflow-core/tensorflow-core-api/target/classes/org/tensorflow/internal/c_api/Listener_BytePointer.class
./tensorflow-core/tensorflow-core-api/target/classes/org/tensorflow/internal/c_api/Compute_func_Pointer_TF_OpKernelContext.class
./tensorflow-core/tensorflow-core-api/target/classes/org/tensorflow/internal/c_api/Deallocator_Pointer_long_Pointer.class

from java.

saudet avatar saudet commented on May 21, 2024

What are you trying to do exactly?

from java.

aday00 avatar aday00 commented on May 21, 2024

Certainly, I have a my.jar file, which contains all the class files. I ask where Pointer.class is, so I can put Pointer.class in my.jar, and fix the NoClassDefFoundError. The java classloader doesn't know where Pointer.class is. My commandline is java -jar my.jar tf --verbose.

For example, for NdArray, I can put these classes in my.jar, and my tests pass. I can use NdArray without exceptions.

tensorflow-java$ find . -name '*class'|grep NdArray|head
./ndarray/target/classes/org/tensorflow/ndarray/BooleanNdArray.class
./ndarray/target/classes/org/tensorflow/ndarray/ByteNdArray.class
./ndarray/target/classes/org/tensorflow/ndarray/NdArrays.class
./ndarray/target/classes/org/tensorflow/ndarray/DoubleNdArray.class
./ndarray/target/classes/org/tensorflow/ndarray/ShortNdArray.class
./ndarray/target/classes/org/tensorflow/ndarray/impl/AbstractNdArray.class
./ndarray/target/classes/org/tensorflow/ndarray/impl/dense/ByteDenseNdArray.class
./ndarray/target/classes/org/tensorflow/ndarray/impl/dense/AbstractDenseNdArray.class
./ndarray/target/classes/org/tensorflow/ndarray/impl/dense/LongDenseNdArray.class
./ndarray/target/classes/org/tensorflow/ndarray/impl/dense/FloatDenseNdArray.class
...

from java.

saudet avatar saudet commented on May 21, 2024

Your JAR file just doesn't contain all the class files. You'll need to add the missing ones

from java.

aday00 avatar aday00 commented on May 21, 2024

Indeed, but I don't know where Pointer.class is. It's missing. Where might it be? I would've thought mvn install built it.

from java.

saudet avatar saudet commented on May 21, 2024

Try this: https://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html

from java.

aday00 avatar aday00 commented on May 21, 2024

Thanks @saudet ! Having zero maven expertise, I see the mvn install typescript I made has this line:

Downloading from central: https://repo.maven.apache.org/maven2/org/bytedeco/javacpp/1.5.3/javacpp-1.5.3.jar

So I downloaded that manually, and Pointer.class is in there:

$ unzip -l javacpp-1.5.3.jar |grep Pointer.class
     5470  2020-04-13 21:52   org/bytedeco/javacpp/CharPointer.class
     4505  2020-04-13 21:52   org/bytedeco/javacpp/FloatPointer.class
     3378  2020-04-13 21:52   org/bytedeco/javacpp/BoolPointer.class
    11444  2020-04-13 21:52   org/bytedeco/javacpp/PointerPointer.class
      479  2020-04-13 21:52   org/bytedeco/javacpp/FunctionPointer.class
     4522  2020-04-13 21:52   org/bytedeco/javacpp/DoublePointer.class
    11136  2020-04-13 21:52   org/bytedeco/javacpp/BytePointer.class
    15662  2020-04-13 21:52   org/bytedeco/javacpp/Pointer.class
     4053  2020-04-13 21:52   org/bytedeco/javacpp/CLongPointer.class
     4505  2020-04-13 21:52   org/bytedeco/javacpp/ShortPointer.class
     4440  2020-04-13 21:52   org/bytedeco/javacpp/LongPointer.class
     5547  2020-04-13 21:52   org/bytedeco/javacpp/IntPointer.class
     4288  2020-04-13 21:52   org/bytedeco/javacpp/BooleanPointer.class
     4055  2020-04-13 21:52   org/bytedeco/javacpp/SizeTPointer.class

Later, I may need to edit pom.xml as you suggest to whitelist the retention of javacpp-1.5.3.jar or other jars, to keep all the class files I need to make a working uber jar. I'm surprised javacpp-1.5.3.jar isn't in maven's ~/.ivy2 cache.

Pleased I get a different error now, will work on getting *.so in java.library.path, and close this ticket.

$ java -jar vis.tf.jar tf --verbose
DEBUG 1596918557098: Started ndarray TensorflowJavaTest.
DEBUG 1596918557364: matrix3d rank 3
DEBUG 1596918557364: Finished ndarray TensorflowJavaTest.
DEBUG 1596918557365: Started graph TensorflowJavaTest.
Warning: Could not load Loader: java.lang.UnsatisfiedLinkError: no jnijavacpp in java.library.path
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jnitensorflow in java.library.path
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
	at java.lang.System.loadLibrary(System.java:1122)
	at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:1631)
	at org.bytedeco.javacpp.Loader.load(Loader.java:1265)
	at org.bytedeco.javacpp.Loader.load(Loader.java:1109)
	at org.tensorflow.internal.c_api.global.tensorflow.<clinit>(tensorflow.java:12)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:348)
	at org.bytedeco.javacpp.Loader.load(Loader.java:1176)
	at org.bytedeco.javacpp.Loader.load(Loader.java:1125)
	at org.tensorflow.NativeLibrary.load(NativeLibrary.java:48)
	at org.tensorflow.TensorFlow.init(TensorFlow.java:111)
	at org.tensorflow.TensorFlow.<clinit>(TensorFlow.java:126)
	at org.tensorflow.Graph.<clinit>(Graph.java:730)
	at vis.TensorflowJavaTest.run(tf.scala:76)
	at vis.TensorflowJavaTest$.runArgs(tf.scala:56)
	at vis.VIS$.main(vis.scala:171)
	at vis.VIS.main(vis.scala)
Caused by: java.lang.UnsatisfiedLinkError: no tensorflow in java.library.path
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
	at java.lang.System.loadLibrary(System.java:1122)
	at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:1631)
	at org.bytedeco.javacpp.Loader.load(Loader.java:1213)
	... 14 more

Thanks for showing me a path to do this the right way in the future. Hope to get there soon!

from java.

aday00 avatar aday00 commented on May 21, 2024

Copying over the *.so files, the test completes in the docker container. Thanks again!

root@4f6083770318:tensorflow-java# java -jar my.jar tf --verbose
DEBUG 1596924611892: Started ndarray TensorflowJavaTest.
DEBUG 1596924612277: matrix3d rank 3
DEBUG 1596924612277: Finished ndarray TensorflowJavaTest.
DEBUG 1596924612278: Started graph TensorflowJavaTest.
DEBUG 1596924616479: Finished graph TensorflowJavaTest.

from java.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.