#java #eclipse #configuration
Вопрос:
Я создаю простейший модульный проект в Eclipse 4.21.0 (см. Ниже) с двумя исходными папками и одним пакетом. Оба main
метода просто выводят «Привет».
- Если я щелкну правой кнопкой мыши
Main1
и запущу как Java-приложение, все будет в порядке. - Если я щелкну правой кнопкой мыши
Main2
и сделаю то же самое, я получу:
Error: Could not find or load main class p1.Main2
Caused by: java.lang.ClassNotFoundException: p1.Main2
Если я проверю две сгенерированные конфигурации запуска ( Main1
и Main2
), они (внешне) идентичны, за исключением имени основного класса. Если я перейду в конфигурацию Main1
запуска и изменю основной класс на Main2
, теперь он работает. Таким образом, Eclipse сгенерировал допустимую конфигурацию запуска для верхней исходной папки и поврежденную для второй исходной папки.
Почему это так, и как я могу сгенерировать допустимые конфигурации запуска для других исходных папок?
Подробные сведения
- Я знаю, что это не проблема для немодульных проектов, но я заинтересован в решении проблемы для модульных проектов.
- Это происходит даже тогда, когда я удаляю / обновляю конфигурацию запуска перед запуском и независимо от порядка, в котором я запускаю
Main1
иMain2
. - Это происходит независимо от того, есть ли у меня одна выходная папка или по одной на исходную папку.
Комментарии:
1. Происходит ли это также в текущей версии Eclipse вместо устаревшей, которая у вас есть? Это также происходит, когда вы удалили конфигурацию запуска? У вас одна и та же папка вывода для обеих исходных папок?
2. Я обновил Eclipse и отредактировал сообщение, чтобы добавить пояснения.
3. Спасибо. Я предполагаю, что командная строка (см. Показать Кнопку командной строки в конфигурациях запуска) сгенерирована некорректно для тех классов в исходной папке, которые не содержат
module-info.java
, когда другая исходная папка содержитmodule-info.java
файл. Пожалуйста, убедитесь, что об этом было сообщено в Eclipse, лучше всего с исправлением.
Ответ №1:
Оказывается, это известная ошибка, о которой сообщалось в 2020-11-23 для версии 4.17: невозможно запустить класс, если module-info.java находится в дополнительном исходном каталоге.
Обходной путь
Как указано в исходном отчете об ошибке, попытка изменить поврежденную конфигурацию не решает проблему:
Если я отредактирую конфигурацию запуска (даже если я просто изменю имя) Вместо этого я получаю следующую ошибку при запуске:
Error occurred during initialization of boot layer...
Однако можно создать допустимую конфигурацию для основной исходной папки (где module-info.java
находится) и изменить эту конфигурацию, чтобы использовать основной класс из дополнительной исходной папки, которая будет работать нормально.
Комментарии:
1. Хороший улов. Вам нравится предоставлять патч? Если да, вам нужна помощь для этого?
2. Спасибо, но я думаю, что мне придется оставить это экспертам.