it-roy-ru.com

Расположение сгенерированных исходных файлов для структуры каталогов maven

Помимо папки src/main/Java, у нас есть одна папка, которая содержит некоторые сгенерированные исходные коды Java, необходимые для основных источников. Генерация кода вызывается вручную, когда это необходимо. Сгенерированный источник проверено в репозитории источника. Все будет построено и упаковано вместе.

Каково было бы наилучшее местоположение для сгенерированной Java sources, которая будет компилироваться вместе с основными источниками? Должно ли это быть:

  • /src/generated/Java (следуя той же логике именования для src/testInt/Java для интеграционных тестов)
  • /generated-src/main/Java (в конфликте с "Каталог src содержит весь исходный материал для сборки проекта")
  • /src/main/generated-Java (ну ... generated-Java не тип)
  • ...?

Первый вариант кажется наиболее подходящим для этого случая. Как вы думаете? Есть ли в Maven docs что-нибудь, что описывает эту ситуацию (которую я упустил из виду)? Вы знаете репо с похожей структурой?

Спасибо.

Ответ

Как подсказывает @ Absurd-Mind, направление, о котором мы думаем, это разделить источник на подмодули (который работает в Gradle). Таким образом, сгенерированный источник и некоторый другой связанный источник войдут в свой собственный подмодуль (они создадут отдельный артефакт), а остальные перейдут в другой подмодуль, который использует этот. Спасибо.

30
igr

Я думаю, что местоположение зависит от того, как источник генерируется и обрабатывается.

  1. Исходный код генерируется автоматически во время процесса сборки : Тогда я бы использовал target/main/Java/, target/test/Java/ и так далее. Этот код не зарегистрирован в CVS, так как вы можете перестроить его довольно легко. Если вы очистите свой проект, каталог target будет удален, а исходный файл будет перестроен.

  2. Исходный код генерируется вручную с помощью внешнего инструмента или аналогичного : я бы использовал generated/src/main/Java/, generated/src/test/Java/, generated/src/main/resources/ и так далее. Этот код должен быть зарегистрирован. Преимущество состоит в том, что, как только вы увидите, что имя каталога верхнего уровня - generated, вы знаете, что все файлы/каталоги ниже также генерируются. Также у вас есть стандартная структура каталогов maven в директории верхнего уровня. Другой момент заключается в том, что очистка проста, просто удалите generated и воссоздайте его, не просматривая многие другие каталоги (как в вашем примере: src/main/generated-Java и src/test/generate-Java).

EDIT: Другим хорошим решением будет создание проекта maven, который содержит только сгенерированный источник, такой как myproject-generated-1.0.3.jar. Этот проект будет зависеть от вашего реального приложения. Тогда вы просто поместите ваш сгенерированный источник int src/main/Java.

34
Absurd-Mind

Насколько я знаю, нет стандартной структуры папок для сгенерированных источников. В своих проектах я предпочитаю нотацию src/gen/Java.

3
bhdrkn

В хранилище исходных файлов проекта Maven внутри src/main/Java, src/main/resources и хранилище тестовых классов внутри src/test/Java. В Maven сгенерированный (Compile code) код сохраняется в целевой папке. Когда вы создаете свой проект Maven, весь сгенерированный код должен быть обновлен в целевой папке.

0
sus007