Мы пытались создать JAR-файлы из загруженной нами версии LanguageTool (LT) Desktop, которая содержит различные JAR-файлы. LT по этой ссылке сделал заявление, что нам нужны все файлы в этих папках libs org и META-INF в нашем проекте. LT ответил, что у них нет опыта работы с Netbeans или JavaFX.
Направления LT
Приложение было построено на Windows 7 с Netbeans 8.2 в качестве JavaFX 8 и Maven JDK 1.8
Мы постарались, следуя этому руководству, автор не особо интересовался правильным форматированием кода и не упомянул, что LT не является поточно-ориентированным. Мы редко работаем с потоками, но думаем, что наш код правильный?
Учебник
Чтобы установить Class AmericanEnglish.class, который находится в zip-файле LT Desktop, который мы извлекли, мы использовали этот процесс
cd C: \ Users \ Me\ Documents \ AAAAA LT UnZip \ LanguageTool-4.7 \ LanguageTool-4.7
jar cf languagesLIBS.jar libs / *
jar cf languagesORG.jar org / *
jar cf languagesMETA.jarMETA-INF / *
Вот где это становится странным для наших ограниченных знаний о добавлении зависимостей в Netbeans
1. Откройте вкладку Projects.
2. Щелкните правой кнопкой мыши на Dependencies.
3. Выберите Добавить зависимость.
4. Установите groupId на: language (может быть любым)
5. Установите artifactId на: en (может быть любым)
6. Установите версию: 4.7 (может быть любым)
7. Нажмите кнопку Добавить, чтобы продолжить.
Зависимость добавляется в pom.xml и отображается под узлом "Библиотеки" проекта Maven. Продолжить:
1. Развернуть Зависимости.
2. Щелкните правой кнопкой мыши библиотеку (например, group.id).
3. Выберите Вручную установить артефакт.
4. Установите Artifact для установки с путем к файлу архива Java (.jar).
5. Нажмите Установить локально.
Этот процесс поместил AmericanEnglish.class в JAR, и он обнаружен Netbeans
import org.languagetool.JLanguageTool;
import org.languagetool.language.AmericanEnglish;
import org.languagetool.rules.RuleMatch;
Вот ошибка, когда мы пытаемся заполнить JLanguageTool AmericanEnglish
Хотя ошибка NoClassDefFoundError может показывать, что приложение не может найти
AmericanEnglish.class, и это является причиной ошибки ClassNotFoundException
Наш вопрос, очевидно, заключается в том, как мы можем это исправить?
И правильно ли мы создаем внешние файлы JAR?
Exception in thread "Thread-4" java.lang.NoClassDefFoundError: com/google/common/cache/CacheLoader
at com.mycompany.maventest.CheckSpellController.lambda$ini$0(CheckSpellController.java:43)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: com.google.common.cache.CacheLoader
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
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)
Мы также видим эти предупреждения при очистке и сборке проекта
POM для languagetool: LIBS: jar: 4.7 отсутствует, информация о зависимостях недоступна
POM для languagetool: ORG: jar: 4.7 отсутствует, информация о зависимостях недоступна
POM для languagetool: META: jar: 4.7 отсутствует, информация о зависимостях недоступна
exec-maven-plugin: 1.2. 1: exec (unpack-dependencies) @ mavenTEST
Когда запускается Clean and Build, мы видим распаковку зависимостей
Вот несколько строк кода, которые вызывают ошибку
static JLanguageTool langTool;
public void ini(){
new Thread(() -> {
langTool = new JLanguageTool(new AmericanEnglish());
}).start();
}
Метод ini () вызывается из метода инициализации
Необходимые файлы JARнаходятся в папке Зависимости
Проект импортирует эти файлы