Как я могу условно включить или исключить файл из архетипа при создании проекта? - PullRequest
22 голосов
/ 17 декабря 2009

Я создаю 2 архетипа Maven для нашего проекта (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?

Ответы [ 4 ]

1 голос
/ 06 января 2010

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

0 голосов
/ 17 января 2013

Спасибо за информацию, Дэн!

Я только что посмотрел на исходный код плагина архетипа, и http://jira.codehaus.org/browse/ARCHETYPE-58, похоже, не решил эту проблему.

Только что создал http://jira.codehaus.org/browse/ARCHETYPE-424 для отслеживания.

0 голосов
/ 21 декабря 2009

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

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

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

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

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

0 голосов
/ 18 декабря 2009

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

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

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

...