javac возвращает «ошибка: модуль не найден: ini4j» - PullRequest
2 голосов
/ 27 июня 2019

У меня есть небольшая программа (сейчас шесть *.java файлов плюс библиотека ini4j-0.5.4.jar).Он отлично работает в Eclipse, но мне нужно скомпилировать и запустить его в системе без графических возможностей, поэтому я создал для него команду javac, которая будет запускаться из каталога проекта:

javac -d bin -classpath libs/ini4j-0.5.4.jar src/main/*.java

Когда он запускается, он генерирует две строки:

error: module not found: ini4j
1 error

Я несколько лет был в стороне от программирования на Java, и я просто догоняю изменения для модулей и тому подобное.Похоже, что это источник проблемы: файл ini4j был написан до того, как появились модули.Я видел намеки на то, что есть способ заставить модульную Java-программу работать с немодульными компонентами, и, очевидно, она работает, когда я запускаю ее из графического интерфейса Eclipse, но способ заставить компилятор javac принять ее ускользает от меня..

Я использую openjdk (и javac) 11.0.3 под Ubuntu 19.04, если это поможет.

Итог: как я могу получить этот немодульный файл JAR вскомпилировать в новую (модульную, простую) Java-программу с помощью компилятора командной строки javac?


РЕШЕНИЕ: С помощью комментариев и ответа:Я нашел способ исправить проблему, изменив командную строку javac следующим образом:

javac -g -d bin --module-path libs/ini4j-0.5.4.jar src/main/*.java

Теперь это не доставляет мне проблем при компиляции.:-) Все еще пытаюсь понять, как на самом деле запустить из командной строки, но это уже другая тема.

Спасибо всем за помощь!

1 Ответ

1 голос
/ 28 июня 2019

Ответ дан здесь в разделе комментариев - Ошибка: автоматический модуль не может быть использован с jlink: - Maven с JavaFX

К сожалению, в jlink можно создавать изображения только тогда, когда все является явным модулем (то есть имеет файл module-info). В хотя бы одна из ваших зависимостей (ini4j) не является явным модулем; увидеть Что такое автоматический модуль ? для дополнительной информации. У вас есть хотя бы несколько вариантов:

(1) Изменить / разветвлять зависимость, чтобы она была явным модулем,

(2) отступите к пути к классам и упакуйте свое приложение в «толстую» банку

(3) try jpackage (ранний доступ, я сомневаюсь, javafx-maven-plugin) обеспечивает поддержку еще)

Лично я бы порекомендовал перейти с вариантом № 2. Используйте любой подходящий плагин maven / gradle для упаковки вашего приложения в качестве исполняемого JAR. Теперь вам будет проще разобраться с приложением и его зависимостями.

...