Ошибка конфигурации запуска Eclipse для классов во второй исходной папке

#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. Спасибо, но я думаю, что мне придется оставить это экспертам.