Skip to content

Exception in thread "main" java.lang.NoClassDefFoundError: org/bytedeco/javacpp/Pointer #96

@aday00

Description

@aday00

Thanks for helping me build tensorflow-java per #94 !

My first tests involve NdArray and Graph, but I naively can't find org/bytedeco/javacpp/Pointer.class to put in my.jar to avoid the following exception:

$ java -jar my.jar tf --verbose
DEBUG 1596849621481: Started ndarray TensorflowJavaTest.
DEBUG 1596849621705: matrix3d rank 3
DEBUG 1596849621706: Finished ndarray TensorflowJavaTest.
DEBUG 1596849621706: Started graph TensorflowJavaTest.
Exception in thread "main" java.lang.NoClassDefFoundError: org/bytedeco/javacpp/Pointer
	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.ClassNotFoundException: org.bytedeco.javacpp.Pointer
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 4 more

The code for my simple test is in Scala, which gets packed into my.jar with other code:

      debug("Started ndarray TensorflowJavaTest.")
      // run simple data buffers test as in https://github.com/tensorflow/java/tree/master/ndarray
      val matrix3d = org.tensorflow.ndarray.NdArrays.ofInts( org.tensorflow.ndarray.Shape.of(2, 3, 2) )
      debug("matrix3d rank " + matrix3d.rank)
      debug("Finished ndarray TensorflowJavaTest.")

      debug("Started graph TensorflowJavaTest.")
      // run simple graph and session tests per https://github.com/tensorflow/java/blob/master/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/SessionTest.java
      val graph = new org.tensorflow.Graph() // defined in https://github.com/tensorflow/java/blob/master/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Graph.java
      val session = new org.tensorflow.Session(graph)
      val tf = org.tensorflow.op.Ops.create(graph)
      debug("Finished graph TensorflowJavaTest.")

Where might the bytedeco classes be? I only see these jars from my build:

(base) tensorflow-java$ find . -name '*jar'|grep -v surefire
./tensorflow-framework/target/tensorflow-framework-0.2.0-SNAPSHOT.jar
./ndarray/target/ndarray-0.2.0-SNAPSHOT.jar
./tensorflow-core/tensorflow-core-generator/target/tensorflow-core-generator-0.2.0-SNAPSHOT.jar
./tensorflow-core/tensorflow-core-generator/target/tensorflow-core-generator-0.2.0-SNAPSHOT-sources.jar
./tensorflow-core/tensorflow-core-api/target/tensorflow-core-api-0.2.0-SNAPSHOT.jar
./tensorflow-core/tensorflow-core-api/target/tensorflow-core-api-0.2.0-SNAPSHOT-linux-x86_64.jar
./tensorflow-core/tensorflow-core-api/target/tensorflow-core-api-0.2.0-SNAPSHOT-sources.jar
./tensorflow-core/tensorflow-core-platform/target/tensorflow-core-platform-0.2.0-SNAPSHOT.jar
./tensorflow-core/tensorflow-core-platform/target/tensorflow-core-platform-0.2.0-SNAPSHOT-sources.jar
./tensorflow-core/tensorflow-core-platform/target/tensorflow-core-platform-0.2.0-SNAPSHOT-javadoc.jar

No bytedeco jars in Maven's .ivy2 cache:

$ find ~/.ivy2/cache -name '*bytedeco*'

In the docker container where I built tensorflow-java, there is a .javacpp directory with bytedeco artifacts, but no .class or .jar files.

root@4f6083770318:~/.javacpp/cache# find|sort
.
./.lock
./javacpp-1.5.3-linux-x86_64.jar
./javacpp-1.5.3-linux-x86_64.jar/org
./javacpp-1.5.3-linux-x86_64.jar/org/bytedeco
./javacpp-1.5.3-linux-x86_64.jar/org/bytedeco/javacpp
./javacpp-1.5.3-linux-x86_64.jar/org/bytedeco/javacpp/linux-x86_64
./javacpp-1.5.3-linux-x86_64.jar/org/bytedeco/javacpp/linux-x86_64/libjnijavacpp.so
./tensorflow-core-api-0.2.0-SNAPSHOT-linux-x86_64.jar
./tensorflow-core-api-0.2.0-SNAPSHOT-linux-x86_64.jar/org
./tensorflow-core-api-0.2.0-SNAPSHOT-linux-x86_64.jar/org/tensorflow
./tensorflow-core-api-0.2.0-SNAPSHOT-linux-x86_64.jar/org/tensorflow/internal
./tensorflow-core-api-0.2.0-SNAPSHOT-linux-x86_64.jar/org/tensorflow/internal/c_api
./tensorflow-core-api-0.2.0-SNAPSHOT-linux-x86_64.jar/org/tensorflow/internal/c_api/linux-x86_64
./tensorflow-core-api-0.2.0-SNAPSHOT-linux-x86_64.jar/org/tensorflow/internal/c_api/linux-x86_64/libjnitensorflow.so
./tensorflow-core-api-0.2.0-SNAPSHOT-linux-x86_64.jar/org/tensorflow/internal/c_api/linux-x86_64/libtensorflow.so
./tensorflow-core-api-0.2.0-SNAPSHOT-linux-x86_64.jar/org/tensorflow/internal/c_api/linux-x86_64/libtensorflow.so.2
./tensorflow-core-api-0.2.0-SNAPSHOT-linux-x86_64.jar/org/tensorflow/internal/c_api/linux-x86_64/libtensorflow_framework.so
./tensorflow-core-api-0.2.0-SNAPSHOT-linux-x86_64.jar/org/tensorflow/internal/c_api/linux-x86_64/libtensorflow_framework.so.2

Would a colleague kindly tell me where the bytedeco Pointer class file is, so I may continue with my tests? Many thanks in advance! Sorry for the basic question. Surely I'm missing something, because I can see bytedeco in various pom.xml files, like this one:

(base) tensorflow-java/tensorflow-core/tensorflow-core-api$ grep -2 bytedeco pom.xml
  <dependencies>
    <dependency>
      <groupId>org.bytedeco</groupId>
      <artifactId>javacpp</artifactId>
      <version>${javacpp.version}</version>
    </dependency>
    <dependency>
      <groupId>org.bytedeco</groupId>
      <artifactId>javacpp</artifactId>
      <version>${javacpp.version}</version>
--
      </plugin>
      <plugin>
        <groupId>org.bytedeco</groupId>
        <artifactId>javacpp</artifactId>
        <version>${javacpp.version}</version>
--
              <quiet>true</quiet>
              <links>
                <link>http://bytedeco.org/javacpp/apidocs</link>
              </links>
            </configuration>

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions