Расположение сгенерированных исходных файлов для структуры каталогов 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 ответов

Решение

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

  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).

РЕДАКТИРОВАТЬ: Еще одним хорошим решением было бы создать проект 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, весь сгенерированный код должен быть обновлен в целевой папке.

Другие вопросы по тегам