Расположение сгенерированных исходных файлов для структуры каталогов maven
Кроме того src/main/java
папка, у нас есть одна папка, которая содержит несколько сгенерированных Java-источников, которые необходимы для основных источников. Генерация кода вызывается вручную, когда это необходимо. Сгенерированный источник проверен в репо источника. Все будет построено и упаковано вместе.
Каково было бы лучшее местоположение для сгенерированных java- источников, которые будут скомпилированы вместе с основными источниками? Должно ли это быть:
/src/generated/java
(следуя той же логике именования дляsrc/testInt/java
для интеграционных испытаний)/generated-src/main/java
(в столкновении с "Каталог src содержит весь исходный материал для сборки проекта")/src/main/generated-java
(Что ж...generated-java
это не тип)- ...?
Первый вариант кажется наиболее подходящим для этого случая. Как вы думаете? Есть ли в Maven docs что-нибудь, что описывает эту ситуацию (которую я упустил из виду)? Вы знаете репо с похожей структурой?
Спасибо.
Ответ
Как подсказывает @Absurd-Mind, направление, о котором мы думаем, это разделить источник на подмодули (что хорошо работает в gradle). Таким образом, сгенерированный источник и некоторый другой связанный источник войдут в свой собственный подмодуль (они создадут отдельный артефакт), а остальные перейдут в другой подмодуль, который использует этот. Спасибо.
5 ответов
Я думаю, что местоположение зависит от того, как источник генерируется и обрабатывается.
Исходный код генерируется автоматически во время процесса сборки: тогда я бы использовал
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 / generate-java).
РЕДАКТИРОВАТЬ: Еще одним хорошим решением было бы создать проект Maven, который содержит только сгенерированный источник, как myproject-generated-1.0.3.jar
, Этот проект будет зависеть от вашего реального приложения. Тогда вы просто поместите ваш сгенерированный источник int src/main/java
,
Насколько я знаю, нет стандартной структуры папок для сгенерированных источников. В своих проектах я предпочитаю src/gen/java
вид обозначений.
Я полностью согласен с принятым ответом и хочу предложить немного другое предложение для именования каталогов:
src-gen/main/java
Предыстория: в мире Eclipse/Maven Tycho (где генерация кода / ресурсов часто играет большую роль) есть
src-gen
каталог для сгенерированного кода, который был установлен как своего рода стандартное соглашение. (макет проекта по умолчанию немного отличается от Maven, поскольку все исходные файлы находятся непосредственно в
src
и
src-gen
).
В проекте Maven, который можно перевести, например, на
src-gen/main/java
,
src-gen/test/java
,
src-gen/test/resources
. Мне это нравится больше, чем перенос всего в "сгенерированный" каталог, потому что
- Источники в
src/main/java
иsrc-gen/main/java
находятся на одной глубине в дереве каталогов - Более ясно, что
src-gen
содержит как:
а) источники / ресурсы, которые участвуют в сборке, и
б) сгенерированный материал. С другой стороны, папка с именем "сгенерированная" может быть чем угодно. - Все упомянутые преимущества
generated/src/main/java
все еще применяется (например, легкая очистка) - После быстрого поиска в Google похоже, что на Github уже есть проекты, использующие этот шаблон
Некоторые мысли / мнения по поводу других предложений из вопроса:
- Вместо
/src/main/generated-java
Я бы, наверное, предпочел что-нибудь вроде/src/main/java-gen
который при сортировке каталогов в алфавитном порядке сохраняет сгенерированный и обычный код рядом друг с другом (<lang>-gen
также еще один шаблон, уже используемый в проектах Eclipse) - по моему мнению
gen
вписывается в краткие официальные названия, такие какsrc
,it
и т.д. более чемgenerated
. Я уже виделsrc/gen/java
несколько раз в дикой природе и чувствую, что это более обычное дело, чем/src/generated/java
. С другой стороны, некоторые плагины Maven используют довольно подробныйtarget/generated-sources/<lang>
каталог, поэтомуgenerated-sources/main/java
также может быть вариантом, если вам не нужны короткие имена...
В конечном счете, я думаю, что наименование не имеет большого значения, и это зависит от ваших предпочтений, поскольку это не официальное соглашение.
NetBeans используется в качестве места для сгенерированного кода. В результате вы увидите, что в дереве проекта появится дополнительный лист с именем
Generated Sources (<tool>)
, а исходный код будет доступен для навигации и не будет отображаться с ошибками компилятора в разметке.
Поэтому, если вы зафиксируете свой код, он не будет находиться под
/target
каталог, и вам нужно будет настроить свой проект maven для дополнительных местоположений исходного кода. В противном случае я предлагаю придерживаться этого принятого стандарта и помещать все в
<project>/target/generated-sources/<tool>
.
В хранилище исходных файлов проекта Maven внутри src/main/java
, src/main/resources
и тестовый магазин класса внутри src/test/java
, В Maven сгенерированный (Compile code) код сохраняется в целевой папке. Когда вы создаете свой проект maven, весь сгенерированный код должен быть обновлен в целевой папке.