Как я могу условно включить или исключить файл из архетипа при создании проекта?

Я создаю архетипы Maven 2 для нашего проекта (Weld). Я хотел бы иметь возможность контролировать, какие файлы помещаются в сгенерированный проект на основе значения свойства, которое определено во время archetype:generate. Например, я предвижу следующее приглашение:

Define value for groupId: : com.example
Define value for artifactId: : myproject
Define value for package:  com.example: :
Define value for includeGradleSupport: : y

Основываясь на значении includeGradleSupport, я хочу включить (или не включать) файл build.gradle в сгенерированный проект. Если пользователь не хочет поддержки Gradle, я не хочу загромождать сгенерированный проект ненужными файлами.

Другим примером является то, что мне может потребоваться предоставить веб-фрагмент Jetty (возможно, активировать прослушиватель), если пользователь хочет поддерживать Jetty.

Все о настройке проекта на основе того, что разработчик намерен использовать. Хотя я мог бы создать целый архетип, иногда изменения настолько незначительны, что было бы проще включать/исключать файл.

Есть ли способ контролировать это поведение с помощью дескриптора archetype-metadata.xml?

Ответ 1

Я лично переместил части, которые могут быть удалены/добавлены по запросу пользователя и помещены в разные maven profiles, чтобы вы могли создавать разные часть с использованием разных профилей

Ответ 2

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

Я думаю, что основной способ сделать это сегодня - это условно создать два разных архетипа артефакта во время первоначальной сборки. Тогда пользователь архетипа явным образом использовал бы ваш аргумент - со всем или вашим типом - без него.

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

Ответ 3

Пока я мог создать целый архетип, иногда изменения настолько незначительны, что было бы проще включать/исключать файл.

Это предложение заставило меня подумать...

Похоже, у вас есть структура проекта по умолчанию.
Предположим, что он большой, имеет много файлов. Конечно, вы не хотите дублировать логику и файлы в другом архетипе.

Теперь иногда проект имеет дополнительное поведение (связанное с Gradle).
Это звучит типичным прецедентом для другого архетипа, который не начинается ни с чем, но происходит после первого. Я видел несколько примеров таких архетипов в Интернете. Разработчик запускает этот архетип только в том случае, если проекту нужен Graddle.: -)

Поэтому я предлагаю: создать свой архетип Graddle, который добавляет только файлы, относящиеся к Graddle.