У меня есть jar-файл, который отлично работает из командной строки Windows 10, но не работает в командной строке Ubuntu 18.04 на моем рабочем столе. Файл был экспортирован из Eclipse в виде jar-файла и скопирован в Ubuntu. В проекте около 30 классов, более полудюжины пакетов. Я сделал несколько переименований, чтобы упростить этот вопрос.
Это команда, используемая для запуска jar:
java -jar myproject.jar
В Ubuntu я получаю сообщение об ошибке "Не удалось найти или загрузить основной класс com.abLaunchThis "
Ниже приведены некоторые вещи, которые я пробовал, основываясь на предложениях из многих похожих постов. Извините, если это дубликат, но я не смог найти работоспособного ответа.
Я проверил, что текущий Java равен 1,8, используя команды:
$ update-alternatives --config java
и
$ java -version
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-8u252-b09-1~18.04-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
(я также проверил, что программа работает с использованием java 8 на Windows.)
Я выполнил следующую проверку, которая отображает все файлы, и подтвердил, что com / a / b / LaunchThis.class существует и пишется точно так же.
java tj myproject.jar
Манифест кажется правильным.
Manifest-Version: 1.0
Main-Class: com.a.b.LaunchThis
Я также попытался распаковать jar и запустить программу прямо из папка / myproject, которая содержит / com и META-INF. Это должно работать, не так ли?
java com.a.b.LaunchThis
java com/a/b/LaunchThis
java com.a.b/LaunchThis
И с одного уровня вне папки myproject:
java myproject/com/a/b/LaunchThis
java myproject.com.a.b/LaunchThis
java myproject.com.a.b.LaunchThis
java myproject/com.a.b.LaunchThis
Я не совсем понимаю, когда требуется синтаксис. или /. Команда пакета в «LaunchThis», которая содержит основную точку входа, следующая:
package com.a.b;
И в каждой из вышеперечисленных итераций я также пытался включить «-cp myproject.jar» в качестве опции.
Всегда одно и то же сообщение об ошибке.
Чтобы избежать опечаток, указанных выше, я сначала выполнил команду ls, чтобы убедиться, что файл можно найти (затем отредактировал эту строку, чтобы создать варианты).
ls myproject.com.a.b.LaunchThis.class
Какие-либо предложения относительно того, что еще попробовать?
Для ухмылки, запуск с Java11 получает этот ответ:
Error: Could not find or load main class com.a.b.LaunchThis
Caused by: java.lang.NoClassDefFoundError: javafx/event/EventHandler
Это делает некоторые смысл, потому что Java11 не включает в себя JavaFX. Но Java 8 действительно включает EventHandler
. Это было частью Java начиная с JavaFX 2.
ОБНОВЛЕНИЕ: Я сделал два баночка "Hello world", один с JavaFX и один без него в Ubuntu Eclipse, работающем под управлением OpenJDK 8. Чтобы получить версию с Чтобы запустить JavaFX, я скачал Oracle JDK 1.8 и связал его с /lib/etc/jfxrt.jar в виде библиотеки "external jar". Обе программы работают в Eclipse, но работает только jar без FX. Фляга FX выдает точно такое же сообщение об ошибке.
Я думаю, это в значительной степени устанавливает мою проблему, заключающуюся в отсутствии JavaFX в составе OpenJDK 8.
Я планирую попробовать сейчас два решения: (1) копирование Oracle jfxrt.jar в библиотеку OpenJDK, (2) обратная загрузка OpenJFX 8.
Простая установка OpenJFX из репозитория загружает OpenJFX 11, который немного устарел, но будет работать с OpenJDK 11.