Как предотвратить IntelliJ от удаления классов, скомпилированных из сгенерированных источников при запуске тестов?
Конфигурация по умолчанию для тестов JUnit в IntelliJ (v2016.3) должна запускаться Build
до запуска. Обычно это хорошо, так как гарантирует, что все изменения были применены до запуска тестов. Однако, похоже, что удаляются скомпилированные классы сгенерированного кода. Как и следовало ожидать, это означает, что тесты не пройдены, потому что тесты для сгенерированных классов больше не могут найти класс, который они пытаются протестировать!
Как сохранить стандартное поведение IntelliJ "Сборка перед запуском", чтобы при запуске тестов мои скомпилированные сгенерированные классы не срывались?
Теперь о некоторых деталях.
Я использую библиотеку Immutables (не Lombok), поэтому это код, который генерируется с использованием "обычных" механизмов Java-аннотаций. IntelliJ с радостью принимает изменения и генерирует код Java с помощью аннотаций. Он также скомпилирует обновленные сгенерированные файлы Java при их изменении. Таким образом, общее поведение "построить автоматически", похоже, работает. Мне кажется, это указывает на то, что у меня правильно настроен процессор Annotation.
Однако, когда я вручную запускаю "Build module" или "Build" запускается перед тестами, файлы классов для сгенерированных файлов Java удаляются. Сгенерированные файлы Java не изменяются никоим образом, но файлы классов, в которые они компилируются, удаляются. Для меня это означает, что в Build есть что-то, что не обращает внимания на зависимости сгенерированного источника.
Одна вещь, которую я заметил, заключается в том, что, если я не отмечу каталог, в котором генерируются источники, как Корень сгенерированного источника, такое поведение "удалить файлы классов сгенерированных исходных файлов" не произойдет. Недостатком этого является то, что IntelliJ больше не распознает сгенерированные классы и помечает их как неизвестные в коде, который их использует.
Как я настроил IntelliJ:
Preferences -> Annotation Processors
используетModule content root
,Obtain processors from project classpath
и имеет указанные поля каталога исходных и тестовых источников (и, похоже, учитывает их при создании исходных файлов)Preferences -> Compiler
не используетClear output directory on rebuild
и используетBuild project automatically
File -> Other Settings -> Annotation Processors
имеет те же конфигурации, что указаны в двух вышеуказанных пунктах- Каталог, в котором генерируются источники, помечается как каталог сгенерированных источников
Я слишком долго ломал голову против этого, стараясь изо всех сил придумать все, на что намекает кто-либо, но безрезультатно. Любая помощь в том, как заставить это работать (кроме "убрать опцию Build из тестового конфига") была бы поразительно полезной и высоко ценилась.
1 ответ
У меня была та же проблема, которая (для меня) была решена путем удаления плагина Atlassian Clover.