Я застрял в этой проблеме примерно за 10 часов.NoClassDefFoundError/ClassNotFoundException при использовании SWT
mvn clean compile install
компилирует код просто отлично. Проблема возникает, когда я пытаюсь запустить объединенный JAR, созданный для включения всех зависимостей. FYI, это происходит при попытке запустить проект внутри Eclipse.
Я пробовал использовать -verbose:class
как VM args во время его запуска java jar
и через Eclipse IDE. Результат показывает, что JVM загружает класс «багги», но я все еще получаю исключение.
Пробовал много других вариантов, например, извлечение библиотек SWT на тот же путь, что и JAR, но это тоже не сработало. Очистка соответствующей части кеша m2 не помогла. Я также дважды проверил связанный JAR для отсутствующего класса и, угадайте, что? Это прямо сейчас.
Поскольку большинство из вас, возможно, уже поняли, это часть гораздо большего проекта, для которого не может быть (легко) создан небольшой тестовый пример. Я попытался создать небольшой образец (без maven), и он работает. Другая (вероятно) важная часть информации заключается в том, что я использую как SWT, так и JavaFX в этом же классе, следуя рабочим рецептам о том, как их смешивать. И я использую Oracle JDK 1.7.
UPDATE: попытался переместить «маленький образец» в Maven, и пока он работает нормально. Я полагаю, что проблема не связана с зависимостью maven или чем-то еще.
UPDATE: Мне удалось создать небольшой проект, который имеет ту же проблему. Это проект Eclipse, но его нужно легко запускать без IDE (так как это проект Maven). Это зависит от версии SWT для Linux x64, но вы также можете изменить эту зависимость. Пожалуйста, проверьте его на https://dl.dropboxusercontent.com/u/5319290/swtjfx.tar.gz
Пакетообрезчик исключение след:
Exception in thread "main"
java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Canvas
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:412)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2531)
at java.lang.Class.getMethod0(Class.java:2774)
at java.lang.Class.getMethod(Class.java:1663)
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
[Loaded java.util.Objects from /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar]
Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.widgets.Canvas
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 19 more
-verbose:class
выход:
...
[Loaded org.eclipse.swt.widgets.Layout from file:/home/me/myapp-jar-with-dependencies.jar]
[Loaded org.eclipse.swt.layout.FillLayout from file:/home/me/myapp-jar-with-dependencies.jar]
[Loaded org.eclipse.swt.graphics.Drawable from file:/home/me/myapp-jar-with-dependencies.jar]
[Loaded org.eclipse.swt.widgets.Widget from file:/home/me/myapp-jar-with-dependencies.jar]
[Loaded org.eclipse.swt.widgets.Control from file:/home/me/myapp-jar-with-dependencies.jar]
[Loaded org.eclipse.swt.widgets.Scrollable from file:/home/me/myapp-jar-with-dependencies.jar]
[Loaded org.eclipse.swt.widgets.Composite from file:/home/me/myapp-jar-with-dependencies.jar]
[Loaded org.eclipse.swt.widgets.Canvas from file:/home/me/myapp-jar-with-dependencies.jar]
[Loaded org.eclipse.swt.widgets.Decorations from file:/home/me/myapp-jar-with-dependencies.jar]
[Loaded org.eclipse.swt.widgets.Shell from file:/home/me/myapp-jar-with-dependencies.jar]
[Loaded java.lang.ClassFormatError from /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar]
[Loaded java.lang.NoSuchMethodException from /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar]
[Loaded java.lang.Throwable$PrintStreamOrWriter from /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar]
[Loaded java.lang.Throwable$WrappedPrintStream from /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar]
[Loaded java.util.IdentityHashMap from /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar]
[Loaded java.util.IdentityHashMap$KeySet from /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar]
[Loaded java.util.Objects from /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar]
[Loaded java.lang.Shutdown from /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar]
[Loaded java.lang.Shutdown$Lock from /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar]
Соответствующая часть моей POM:
<repositories>
...
<repository>
<id>swt-repo</id>
<url>https://swt-repo.googlecode.com/svn/repo/</url>
</repository>
</repositories>
...
<dependencies>
...
<dependency>
<groupId>org.eclipse.swt</groupId>
<artifactId>org.eclipse.swt.gtk.linux.x86_64</artifactId>
<version>4.3</version>
</dependency>
</dependencies>
Любой ключ ? Если вам нужна дополнительная информация, будьте моим гостем и попросите, пожалуйста.
Спасибо за любую помощь.