Работа с пользовательскими архетипами Maven (часть 3)
В части 1 и части 2 этой серии я был в состоянии продемонстрировать , как вы можете создать собственный архетип и выпустить его в репозиторий Maven. В этой заключительной части мы рассмотрим, что вам нужно сделать, чтобы интегрировать это в процесс разработки. Это будет включать следующие шаги:
- Загрузка архетипа и связанных с ним метаданных в диспетчер репозитория Maven .
- Настройка IDE для использования архетипа.
- Генерация каркасного проекта из архетипа.
Шаг 1 — Загрузите свой архетип
Во второй части мы рассказали о выпуске и развертывании архетипа. Для краткости я просто продемонстрировал развертывание выпуска в локальной файловой системе, но если мы хотим поделиться нашим архетипом, мы должны развернуть его в удаленном хранилище, к которому могут получить доступ другие разработчики. Удаленный репозиторий Maven, в его самой простой форме, может обслуживаться с использованием Http-сервера, такого как Apache или Nginx . Однако в настоящее время я рекомендую вам использовать диспетчер репозитория Maven (MRM), поскольку эти инструменты специально предназначены для обслуживания (и развертывания) артефактов Maven. Есть в основном три варианта для вашего MRM — Nexus , Artifactory или Archiva . Сравнение матрицы возможностей доступно здесь , Все они доступны с открытым исходным кодом, и Nexus и Artifactory, в частности, являются отличными инструментами. Однако в настоящее время Artifactory является единственным, который поддерживает опцию облачной службы, которая, как вы можете ожидать, очень хорошо интегрируется с нашей размещенной службой непрерывной интеграции . Это позволяет вам обеспечить себя полноценным MRM в очень короткие сроки.
Итак, как мы можем добавить наш архетип в хранилище? Это простой процесс с использованием встроенного в Artifact Deployer Artifactory, который позволяет загружать файл и предоставлять его координаты Maven GAV.

Далее нам нужно добавить некоторые дополнительные метаданные о нашем архетипе в виде «каталога»:
Этот файл в идеале должен быть помещен в соответствующую папку репозитория Maven, и он содержит информацию обо всех архетипах, которые существуют в репозитории. Мы можем просто добавить этот файл в наш репозиторий libs-release, используя REST API Artifactory:
Шаг 2 — Настройте вашу IDE
Теперь, когда наш архетип развернут удаленно, мы можем начать использовать его изнутри нашей IDE — в моем случае — Eclipse. Чтобы получить хорошую интеграцию Maven в Eclipse, вам действительно следует использовать последнюю версию (0.10.0) m2eclipse . После установки m2eclipse он предоставляет удобную функцию, которая позволяет добавлять и удалять каталоги архетипов. Вам нужно будет добавить ваш развернутый каталог архетипов в список каталогов, доступных из m2eclipse. Это гарантирует, что вы сможете получить доступ к вашим пользовательским архетипам при запуске мастера создания проекта Maven в Eclipse, как мы вскоре увидим.
Выберите пункт меню «Windows»> «Настройки», чтобы открыть диалоговое окно «Настройки» и перейти к настройкам Maven> «Архетипы», как показано.
Нажмите «Добавить удаленный каталог», чтобы открыть диалоговое окно «Удаленный каталог архетипов». В текстовом поле «Файл каталога» введите путь к файлу удаленного каталога, а в текстовом поле «Описание» введите имя своего каталога:
Шаг 3 — Создайте свой проект
Теперь вы должны быть готовы создать каркасный проект Maven внутри Eclipse. Выберите пункт меню «Файл»> «Создать»> «Другое», чтобы открыть диалоговое окно «Выбор мастера». В поле прокрутки выберите Maven Project и нажмите «Далее». Следуйте указаниям мастера, чтобы настроить местоположение вашего проекта. В конце концов, мастер позволяет вам выбрать архетип для создания вашего проекта Maven. В раскрывающемся списке «Каталог» выберите пользовательский каталог. Затем найдите и выберите свой архетип:

Нажмите Далее и введите значения GAV для вашего нового проекта. Et voila — вы должны были просто создать скелетный проект, основанный на вашем собственном архетипе, с помощью гладкого IDE-мастера.
Как добавить к проекту архетип maven
Guide to Creating Archetypes
Creating an archetype is a pretty straight forward process. An archetype is a very simple artifact, that contains the project prototype you wish to create. An archetype is made up of:
- an archetype descriptor ( archetype-metadata.xml in directory: src/main/resources/META-INF/maven/ ). It lists all the files that will be contained in the archetype and categorizes them so they can be processed correctly by the archetype generation mechanism.
- the prototype files that are copied by the archetype plugin (directory: src/main/resources/archetype-resources/ )
- the prototype pom ( pom.xml in: src/main/resources/archetype-resources )
- a pom for the archetype ( pom.xml in the archetype’s root directory).
To create an archetype follow these steps:
1. Create a new project and pom.xml for the archetype artifact
An example pom.xml for an archetype artifact looks as follows:
All you need to specify is a groupId , artifactId and version . These three parameters will be needed later for invoking the archetype via archetype:generate from the commandline.
2. Create the archetype descriptor
The archetype descriptor is a file called archetype-metadata.xml which must be located in the src/main/resources/META-INF/maven/ directory. An example of an archetype descriptor can be found in the quickstart archetype:
The attribute name tag should be the same as the artifactId in the archetype pom.xml .
The boolean attribute partial show if this archetype is representing a full Maven project or only parts.
The requiredProperties , fileSets and modules tags represent the differents parts of the project:
- <requiredProperties> : List of required properties to generate a project from this archetype
- <fileSets> : File sets definition
- <modules> : Modules definition
At this point one can only specify individual files to be created but not empty directories.
Thus the quickstart archetype shown above defines the following directory structure:
3. Create the prototype files and the prototype pom.xml
The next component of the archetype to be created is the prototype pom.xml . Any pom.xml will do, just don’t forget to the set artifactId and groupId as variables ( $
An example for a prototype pom.xml is:
4. Install the archetype and run the archetype plugin
Now you are ready to install the archetype:
Now that you have created an archetype, you can try it on your local system by using the following command. In this command, you need to specify the full information about the archetype you want to use (its groupId , its artifactId , its version ) and the information about the new project you want to create ( artifactId and groupId ). Don’t forget to include the version of your archetype (if you don’t include the version, you archetype creation may fail with a message that version:RELEASE was not found)
Once you are happy with the state of your archetype, you can deploy (or submit it to Maven Central) it as any other artifact and the archetype will then be available to any user of Maven.
Alternative way to start creating your Archetype
Instead of manually creating the directory structure needed for an archetype, simply use
Как добавить архетип maven в Intelij IDEA
Я учу Spring и пытался создать проект maven в Community версии. Не нашёл нужный архетип (webapp). И пытался добавить архетип, но он не добавлялся. Проделал операцию 2-3 раза ничего не получилось. Помогите пж
Архетип это из терминологии Maven, я так понимаю это шаблоны проектов, ну так создай проект как показано в документации Maven: вводи команды в терминале, проверь созданный проект, убедись что нет ошибок при сборки mvn clean install и затем открой его в Idea.
Если у тебя поставлен plugin Maven в Idea, то может сама настроить конфигурацию по pom.xml.
Все манипуляции проводишь в pom.xml, например добавляешь в pom.xml артефакт (зависимость), если после этого библиотека сама не загрузилась то жмешь в правой панели Maven кнопку Reload All Maven projects. Если не загрузилась опять то читаешь текст ошибки, анализируешь что там сказано и решаешь проблему.

Насколько я помню, комьюнити версия не будет нормально работать с проектом спринга в плане его индексирования как надо и прочих плюшек.
А по поводу архетипа: его можно добавить руками, взяв образец с мавен-централа.
Насколько я помню, комьюнити версия не будет нормально работать с проектом спринга в плане его индексирования как надо и прочих плюшек.
Будет. Индексирует любой classpath. Ultimate никогда не ставил, использовал Community даже когда работал на банк на галере среди пользователей Ultimate.
Я заметил что community только не полный рефакторинг спринга, т.е. что-нибудь переименуешь в аннотациях или xml и это не подхватится автоматом по проекту, но это важно только людям которые полностью доверяют автоматическому рефакторингу, а люди с шапочками из фольги проверяют все сами и никому на слово не верят. Это ограничение автоматического рефакторинга не касается кода на Java, только то что требует препроцессинг.
Ну и всякая мелочь типа нет поддержки FreeMarker темплейтов, но зато HTML работает отлично и поэтому никаких проблем с использованием thymeleaf. А если в фирме захотят чтоб я правил FreeMarker или Velocity темплейты то пусть они мне оплатят Ultimate.

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

но вот всякие продвинутые фишки код-анализа (вроде навигации по стринговым плейсхолдерам) работать не должны
Ну я про них и говорил.

Зачем тебе архетип, чувак)
Если у тебя какой-то лютый кастом, то берешь заготовку помника вот отсюда и дальше сам вписываешь, что тебе нужно
А если тебе нужен спринг, то идешь на https://start.spring.io/ и там генеришь себе новый проект под свои нужды
система архетипов Мавена довольно убогая и неудобная (мавен можно расширять для удобства, но обычно тем, кто умеет это делать — не нужен архетип webapp). Админка спринг-старта гораздо адекватней

система архетипов Мавена довольно убогая и неудобная (мавен можно расширять для удобства, но обычно тем, кто умеет это делать — не нужен архетип webapp). Админка спринг-старта гораздо адекватней
Вот тут удваиваю. Как-то пытался сделать архетипом проект, в итоге плюнул.

Кажется, при текущем положении вещей джава стала такой сложной, что без код-анализа ее лучше не трогать))
Слава героям, которые умудряются программировать джаву в виме. Такие люди реально существуют и очень страдают
Зачем они это делают, впрочем, неясно. Если нет денег на Алтимейт, то Эклипс со спринговым плагином никто не отменял

Слава героям, которые умудряются программировать джаву в виме. Такие люди реально существуют и очень страдают
Я не пробовал. После ИДЕИ с ее фишками по рефакторингу и вообще анализу в целом, я даже пробовать не хочу что-то там руками писать в блокноте, это изврат.
Такие люди реально существуют и очень страдают
А ты их вживую видел?

Зачем они это делают, впрочем, неясно. Если нет денег на Алтимейт, то Эклипс со спринговым плагином никто не отменял
Ну есть определенная доля фанатично упертых, которые либо просто все делают в виме, либо считают, что «нужно понимать код» и пишут все руками. Последнее, учитывая многословность джавы, вообще треш, угар и содомия, ИМХО.

Тут такие крикуны были точно.

Буквально за месяцы до ковида общался с текущим мантейнером Мавена. Он неплохой чувак, но очень упертый относительно лучших практик ынтерпрайза двадцатилетней давности. На все вопросы о том, какого хрена всё такое отсталое и почему бы не скопипастить фичи того же npm, он отвечает как типичный лоровец: #ненужно, совсем уже вы там охренели, не можете в помник руками XML тэги дописывать, какие-то команды в командной строке хотите!
можно элементарно форкнуть мавен и добавить всё нужное, но кто об этом форке узнает?
Ну я уверен это все рофлы, существуют ли такие люди в действительности, это вопрос.

#ненужно, совсем уже вы там охренели, не можете в помник руками XML тэги дописывать, какие-то команды в командной строке хотите!
Ты сейчас про некий аналог артисана для ларавеля говоришь? Чтобы не руками править конфиг, а просто командой? ИМХО, не вижу ничего такого в том, чтобы добавить зависимость в ХМЛ, не так уж это запарно…

Ну я уверен это все рофлы, существуют ли такие люди в действительности, это вопрос.
Ну не факт. Тут шизиков полно =)

например, это джаваскрипт-разработчики, которым временами нужно пердолить на сервере не только Ноду, но еще и джаву (микросервисы на разном бывают написаны)
вкатиться в простой сервер на жс или го, или руби с пайтоном можно довольно быстро. А вот от того, сколько в джаве слоёв ынтерпрайзного нужно познать и прикрутить какой-то тулинг — у человека духовно неподготовленного вызывает взрывной бугурт
я своими глазами видел, как суперсиньёрный жс-разработчик из Гугла по SSH уныло пытался wget-ом скачать мавен и потом в терминале и виме создавал структуру проекта для вебаппа. Было очень горько за джаву. И причём, ничем не поможешь же тут.

ИМХО, не вижу ничего такого в том, чтобы добавить зависимость в ХМЛ, не так уж это запарно…
ну например, мне иногда нужно генерировать проекты, чтобы собирать кастомные сборки
иногда мне нужно делать новые проекты из командной строки, например всякие микросервисы-однострочники, которые берут на вход HTTP GET ?q=, процессят параметр одной строчкой и отдают ниже по пайплайну
какая-то элементарная команда вроде «mvnx add spring latest» у меня написана уже, конечно. Тупо парсю XML, втыкаю куда надо, всё вы таком духе.
или например, «mvnx upgrade all latest-stable»
или например, динамические версии корневого проекта, в зависимости от переменных окружения (у меня это сделано экстеншеном, когда-то скопипащенным у… атлассиана?)
Вопрос в том, что это мог бы сделать и основной проект Мавена. Я даже предлагал влить этот код им. Только вот от идеи команды для апгрейда версий мантейнеры пришли в ужас. Типа, поощряет плохие практики, версии нужно хорошо обдумывать головой и сложность изменения — это хорошо, а не нравится — валите в этот ваш джаваскрипт, а у нас тут есть свой бог — Ынтерпрайз
Услышав эти слова, Заратустра поклонился святому и сказал: «Что мог бы я дать вам! Позвольте мне скорее уйти, чтобы чего-нибудь я не взял у вас!»
Так разошлись они в разные стороны, старец и человек, и каждый смеялся, как смеются дети.
Но когда Заратустра остался один, говорил он так в сердце своем: «Возможно ли это! Этот святой старец в своем лесу еще не слыхал о том, что Бог мертв».