Maven Archetype — это набор шаблонов проектов, который предоставляет разработчикам средства для создания параметризованных версий встроенных или пользовательских артефактов скаффолдинга. Недавно я применил его в нашем репозитории Xili P2 для автоматизации создания заглушек модулей Eclipse .
Поскольку все получилось достаточно хорошо, я подумал, что стоит поделиться своим опытом в этом посте.
Maven Archetype
Maven Archetype позволяет программистам быстро и согласованно настраивать строительные леса в соответствии с соглашениями и передовыми методами, предписанными проектом или организацией. Он поставляется с набором предопределенных шаблонов для облегчения создания часто используемых структур.
Список архетипов по умолчанию, предоставляемых Maven, см. В разделе « Введение в архетипы» , раздел « Предоставляемые архетипы» .
Например, создание заглушки проекта веб-приложения может быть основано на архетипе maven-archetype-webapp :
1
2
3
4
5
6
7
8
|
mvn archetype:generate \ -DgroupId=com.codeaffine \ -DartifactId=com.codeaffine.webapp \ -Dversion=1.0-SNAPSHOT \ -DarchetypeGroupId=org.apache.maven.archetypes \ -DarchetypeArtifactId=maven-archetype-webapp \ -DarchetypeVersion=1.0 \ -DinteractiveMode= false |
Параметры groupId, artifactId и version используются для создания корневой папки проекта, содержащей соответствующее настроенное определение объектной модели проекта ( pom.xml
). Тогда как аргументы archetypeXXX
указывают, какой шаблон использовать. Основанный на веб-приложении архетип Maven предоставляет pom, который устанавливает атрибут packaging
жизненного цикла сборки в war
и создает следующую структуру каталогов и файлов:
1
2
3
4
5
6
7
8
9
|
com.codeaffine.webapp |-- pom.xml `-- src `-- main |-- resources `-- webapp |-- WEB-INF | `-- web.xml `-- index.jsp |
Если вам довелось работать с Maven Integration для Eclipse, вы можете выбрать мастер New Project для проектов Maven, чтобы сгенерировать проект Eclipse, полученный из определенного архетипа:
Выбор, показанный изображением, создает ту же структуру, что и в примере командной строки выше. Кроме того, он предоставляет специфичные для проекта Eclipse файлы и настройки и автоматически импортирует сгенерированный проект в рабочую область IDE.
Создание собственного архетипа
Несмотря на то, что предопределенные шаблоны хороши для быстрого старта, их явно недостаточно для применения определенных соглашений проекта или организации. Например, Eclipse IDE позволяет настраивать все виды настроек в файлах, расположенных в сгенерированной структуре лесов. Следовательно, было бы полезно включить такие пресеты в пользовательский архетип.
К счастью, Maven Archetype облегчает создание пользовательских определений шаблонов, как описано в интерактивной документации Руководство по созданию архетипов . Однако вместо создания архетипа с нуля я обнаружил, что более эффективно использовать опцию создания из проекта, как описано Дирком Рейнеманом .
Я смог сделать это, потому что у меня уже было несколько подключаемых модулей, фрагментов и функций Eclipse, которые я мог использовать в качестве прототипов.
В GitHub я нашел определение tycho-eclipse-plugin-archetype, предоставляющее шаблон для генерации модулей eclipse с тестовыми фрагментами и сайтом репозитория за один шаг, что, по-видимому, обеспечивает хорошее быстрое начало для разработки подключаемых модулей eclipse.
Создать из проекта
Чтобы создать Maven Archetype из данного проекта, скопируйте его в рабочий каталог и удалите все файлы, которые не должны попадать в пакет archetype. Этот торс проекта теперь предоставляет все файлы и структуру каталогов, которые составляют строительные леса.
Убедитесь, что корневая папка туловища также содержит простой pom.xml
как описано в pom.xml
шаге Руководства по созданию архетипов . После этого перейдите в папку, в которой находится pom, и выполните следующую команду:
1
|
mvn archetype:create-from-project |
Это генерирует структуру разработки архетипа, хранящуюся в подпапке target/generated-sources/archetype
. Он содержит помпу для нового архетипа, который получен из того, который был помещен в корневую папку торса проекта. Кроме того, существует src/main/resources/archetype-resources
который содержит копию структуры и ресурсов скаффолдинга.
Файл src/main/resources/META-INF/maven/archetype-metadata.xml
является ArchetypeDescriptor , который перечисляет все файлы, которые будут содержаться во вновь созданном шаблоне, и классифицирует их, поэтому они могут быть правильно обработаны механизмом генерации ,
Теперь можно упаковать архетип и дать ему первую попытку проверить, работает ли он так, как ожидалось. Для этого перейдите в папку, в которой находится pom архетипа, и запустите:
1
|
mvn install |
Это делает архетип доступным в вашем локальном хранилище. Использовать его в первый раз так же просто, как в приведенном выше примере с веб-приложением, и должно выглядеть примерно так:
1
2
3
4
|
mvn archetype:generate \ -DarchetypeArtifactId=foo.artefactId \ -DarchetypeGroupId=foo.groupId \ -DarchetypeVersion=foo.version |
Если все сделано правильно, теперь Maven должен был создать заглушку проекта, которая в основном выглядит так же, как и составленная в торсе проекта.
корректировок
К сожалению, есть еще много работы. Плагины, фрагменты и функции Eclipse предоставляют свои собственные мета-дескрипторы, содержащие идентификаторы, номера версий, имена и тому подобное. И, конечно, мы ожидаем, что эти значения будут разумно предварительно заполнены процессором шаблонов.
Maven Archetypes обрабатывает это с помощью свойств, которые могут быть объявлены в ArchetypeDescriptor (см. Выше).
1
2
3
|
< requiredProperties > < requiredProperty key = "identifier" ></ requiredProperty > </ requiredProperties > |
Теперь вы можете ссылаться на это свойство в произвольных ресурсах архетипа, используя следующий синтаксис:
1
2
3
|
[...] Bundle-SymbolicName: ${identifier} [...] |
Инициализация свойства может быть выполнена путем установки его в качестве системного параметра командной строки, например:
1
2
3
4
5
|
mvn archetype:generate \ -DarchetypeArtifactId=foo.artefactId \ -DarchetypeGroupId=foo.groupId \ -DarchetypeVersion=foo.version \ -Didentifier=foo.identifier \ |
Другой проблемой для плагинов и фрагментов является, например, пустая или несуществующая исходная папка, на которую .project
файл определения .project
. Maven игнорирует пустые каталоги во время обработки шаблона. Но следующий фрагмент показывает, как настроить дескриптор для создания таких папок:
1
2
3
4
5
6
7
8
|
< fileSets > < fileSet filtered = "true" encoding = "UTF-8" > < directory >src</ directory > < includes > < include >**/*.java</ include > </ includes > </ fileSet > [...] |
Для получения более подробной информации о конфигурации дескриптора, пожалуйста, обратитесь к онлайн-документации .
Сборка штук
Имея это знание, я смог создать артефакты Maven Archetype для плагинов, тестовых фрагментов и заглушек определения функций, которые соответствуют предустановкам разработки Xili. Это означает, что каждая заглушка поставляется с определенными настройками для форматирования кода, среды выполнения, параметров компиляции ошибок / предупреждений и тому подобного из коробки.
По соображениям гибкости я решил использовать три отдельных артефакта вместо одного и связал их вместе, используя небольшой сценарий. Это потому, что в большинстве случаев мне нужно создать все три заглушки за один шаг. Хотя это делает мастер Eclipse New Project непригодным для использования, это не представляет особой проблемы, поскольку единственным преимуществом будет автоматический импорт заглушек из рабочей области.
Остались только ручные задачи: регистрация новых модулей в родительском модуле определения сборки репозитория и добавление новой записи функции в связанный с P2 catagory.xml
.
Вывод
Этот пост дал краткое введение в Maven Archetype и показал, как его можно использовать для автоматизации создания модуля Eclipse. При наличии пользовательских архетипов, описанных выше, теперь требуется около минуты, чтобы добавить новое определение функции с плагином и тестовым фрагментом в рабочую область и определение сборки.
И готовность к разработке и сборке в течение минуты не так уж и плоха по сравнению с предыдущим руководством по созданию, настройке, копированию и вставке документов … Итак, вы хотите сами посмотреть на источники архетипов, определения находятся в com.codeaffine.xiliary.archetype
проект репозитория Xili на GitHub.
Ссылка: | Эффективное создание модулей Eclipse с Maven Archetype от нашего партнера JCG Фрэнка Аппеля в блоге Code Affine . |