Java не может найти javax / vecmath / Vector3d.class, даже если jar находится в classpath - PullRequest
0 голосов
/ 06 марта 2020

На моей платформе установлена ​​Ubuntu 18.04.3 и версия openjdk "1.8.0_242".

Я запускаю чей-то исполняемый файл JAR, который ссылается на javax.vecmath.Vector3d, но для этого openmdk vm генерирует NoClassDefFoundError класс, как показано ниже. Класс javax установлен в моей системе в /usr/share/java/vecmath.jar, я проверил, что он содержит javax.vecmath.Vector3d, поэтому я предоставляю этот jar в опции '-cp':

% java -cp /usr/share/java/vecmath.jar -jar cameraCalc.jar

Но я получаю эту ошибку:

java -cp /usr/share/java/vecmath-1.5.2.jar  -jar cameraCalc.jar 
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: [Ljavax/vecmath/Vector3d;
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
    at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
    at java.lang.Class.getMethod0(Class.java:3018)
    at java.lang.Class.getMethod(Class.java:1784)
    at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: javax.vecmath.Vector3d
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
    ... 7 more

Почему jvm не может найти этот класс, даже если он находится в vecmath.jar, указанном как опция '-cp'?

Спасибо, Том

1 Ответ

0 голосов
/ 06 марта 2020

Моя проблема была из-за запуска исполняемого файла JAR, который не содержит все необходимые классы. Из документации:

Когда вы используете эту опцию, файл JAR является источником всех пользовательских классов, а другие параметры пути к классам пользователей игнорируются.

Итак " -cp "параметры будут игнорироваться при запуске исполняемого файла JAR.

...