Ошибка Spark Java в автономном приложении

Мне удалось создать исполняемый файл с помощью launch4j, и он отлично работает на моей машине. Когда я отправляю его кому-то для запуска на своей машине с Windows, они получают следующую ошибку:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: spark/TemplateEngine
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
        at java.lang.Class.privateGetMethodRecursive(Unknown Source)
        at java.lang.Class.getMethod0(Unknown Source)
        at java.lang.Class.getMethod(Unknown Source)
        at sun.launcher.LauncherHelper.validateMainClass(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: spark.TemplateEngine
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 7 more

Какие-нибудь мысли?


person Zohaib Zaidi    schedule 18.12.2015    source источник
comment
Да - это объясняет. Вызвано: java.lang.ClassNotFoundException: spark.TemplateEngine   -  person duffymo    schedule 18.12.2015
comment
вероятно, у него нет зависимостей приложения   -  person user1121883    schedule 18.12.2015
comment
Этот exe-файл отлично работает на моей машине, на которой он был разработан. Я добавил все зависимости в пути к классам в launch4j   -  person Zohaib Zaidi    schedule 18.12.2015
comment
На узле, который он не работает, убедитесь, что путь к классам был правильно установлен, и этот jar доступен в пути к классам.   -  person Ravindra babu    schedule 18.12.2015
comment
Да, спасибо .. это было проблемой. Только что исправил. Пришлось установить относительный путь класса для банок.   -  person Zohaib Zaidi    schedule 18.12.2015
comment
Посмотрите на это. Меня устраивает.   -  person Matías Sebastián Ávalos    schedule 01.12.2016


Ответы (3)


Это исключение также может возникнуть, если для ваших зависимостей maven не установлено <scope> время компиляции (по умолчанию), а файлы jar зависимостей недоступны во время компиляции. Например, если зависимости maven имеют <scope>provided</scope> в вашем компиляторе pom.xml, предполагается, что JRE/среда предоставит эти файлы jar зависимостей, но когда исходники скомпилированы, а эти зависимости не найдены, будет выдано это исключение.

Например - ниже может привести к этому исключению, если зависимость spark-mllib_2.11 не найдена во время компиляции, хотя они добавлены и при редактировании нет ошибки;

<dependency>
   <groupId>org.apache.spark</groupId>
   <artifactId>spark-mllib_2.11</artifactId>
   <version>2.2.0</version>
   <scope>provided</scope>
</dependency>
person khawarizmi    schedule 16.10.2017
comment
Решил ту же проблему в моем случае с IntelliJ IDEA + SBT. - person CyberPlayerOne; 08.01.2020

У меня была эта проблема, потому что моя версия Java по умолчанию была 9, и Spark почему-то не распознал ее. Поэтому я перешел на версию 8, и это сработало. Чтобы изменить в линуксе:

sudo update-java-alternatives -s java-1.8.0-openjdk-amd64

В вашем случае вам может понадобиться другая версия, поэтому выберите свою (чтобы перечислить версии, которые есть на вашем компьютере, используйте параметр -l).

person Andrelbol    schedule 13.04.2017

Пришлось установить относительные пути в пути к классу, чтобы исполняемый файл мог найти файлы jar.

person Zohaib Zaidi    schedule 18.12.2015
comment
Вы также можете создать толстую банку, используя maven-assembly-plugin. - person ; 24.08.2016