Расположение сгенерированных исходных файлов для структуры каталога maven
Помимо папки src/main/java
у нас есть одна папка, которая содержит некоторые сгенерированные источники java, необходимые для основных источников. При необходимости генерация кода вызывается вручную. Сгенерированный источник отмечен в исходное репо. Все будет построено и упаковано вместе.
Каким будет лучшее место для сгенерированных java источников, которые собираются вместе с основными источниками? Должно ли быть:
-
/src/generated/java
(следуя той же логике именования для src/testInt/java
для тестов интеграции)
-
/generated-src/main/java
(при столкновении с "Каталог src содержит весь исходный материал для построения проекта" )
-
/src/main/generated-java
(ну... generated-java
не является типом)
- ...
Первый вариант кажется наиболее подходящим для этого случая. Как вы думаете? Есть ли что-нибудь в документах Maven, описывающих эту ситуацию (что я забыл)? Знаете ли вы какое-либо репо с аналогичной структурой?
Спасибо.
Ответ
Как было предложено @Absurd-Mind, направление, о котором мы думаем, состоит в том, чтобы разбить источник на подмодули (что хорошо работает в gradle). Таким образом, сгенерированный источник и некоторый другой родственный источник войдут в свой собственный подмодуль (они будут создавать отдельный артефакт), а остальные будут использоваться в другом подмодуле, который использует этот. Спасибо.
Ответы
Ответ 1
Я думаю, что местоположение зависит от того, как генерируется и обрабатывается источник.
-
Исходный код генерируется автоматически во время процесса сборки. Тогда я бы использовал target/main/java/
, target/test/java/
и так далее. Этот код не проверяется на CVS, так как вы можете легко его перестроить. Если вы очистите проект, каталог target
будет удален, а источник будет восстановлен.
-
Исходный код генерируется вручную внешним инструментом или подобным: я бы использовал generated/src/main/java/
, generated/src/test/java/
, generated/src/main/resources/
и так далее. Этот код должен быть проверен. Преимущество заключается в том, что, как только вы увидите, что имя каталога верхнего уровня generated
, вы знаете, что все файлы/каталоги ниже также генерируются. Также у вас есть стандартная структура каталога maven в каталоге верхнего уровня. Еще один момент заключается в том, что очистка легко, просто удалите generated
и заново создайте ее, не просматривая многие другие каталоги (например, в вашем примере: src/main/generated-java
и src/test/generated-java).
EDIT. Еще одним хорошим решением было бы создать проект maven, в котором будет только сгенерированный источник, например myproject-generated-1.0.3.jar
. Этот проект будет зависеть от вашего реального приложения. Затем вы просто поместите свой сгенерированный источник int src/main/java
.
Ответ 2
Насколько я знаю, нет стандартной структуры папок для сгенерированных источников. В моих проектах я предпочитаю обозначение типа src/gen/java
.
Ответ 3
В хранилище исходных файлов проекта Maven в src/main/java
, src/main/resources
и хранилище тестовых классов в src/test/java
.
В Maven сгенерированный код (код компиляции) сохраняется в target/
folder.
Когда вы создаете свой проект Maven, весь сгенерированный код должен быть обновлен в целевой папке.