[Java] Создание архетипа Maven из существующего проекта (перевод)
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Создайте архетип из существующего проекта и сгенерируйте новые клоны с минимальными усилиями. Прекратите копи-паст проектов и создайте архетип! Если вы создаете облако микросервисов или находитесь в среде, где вам нужно сгенерировать несколько проектов или модулей maven, очень полезно создавать архетипы для разработки этих новых модулей/проектов.Что такое архетип?Архетип maven - это шаблонный проект. Maven предлагает несколько архетипов, которые позволяют создавать новые модули maven, готовые к запуску за несколько секунд.Как использовать общий архетип?Использовать архетип довольно просто. Если вы хотите сгенерировать архетип на основе списка по умолчанию, просто запустите:
mvn archetype:generate
Затем выберите один из вариантов, укажите детали и подтвердите. Новый проект уже будет создан.Как использовать стандартный архетип?В этом случае нам нужно указать groupId и artifactId архетипа, чтобы иметь возможность использовать настраиваемый. В качестве примера давайте посмотрим на архетип, предоставленный Adobe для AEM:
mvn archetype:generate \
-DarchetypeGroupId=com.adobe.aem \
-D archetypeArtifactId=aem-project-archetype \
-D archetypeVersion=27
Если вы запустите команду, вас спросят о некоторых свойствах вашего проекта. Некоторые свойства являются стандартными (groupId, version, artifactId и package), но другие были специфичны этого артефакта, как appTitle и sdkVersion. Эти свойства помогут архетипу сгенерировать для вас новый проект, и через несколько секунд, ничего не зная об Adobe AEM, вы получите свой новый проект, готовый к запуску.Как работает архетип?Внутри архетипа есть все файлы (pom-файл, классы, readme и т. д.) С переменными, которые будут заменены во время генерации проекта. В качестве примера вы можете увидеть эти переменные в нескольких частях файла pom ниже.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}</artifactId>
<version>${version}</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>${artifactId}</artifactId>
<name>${appTitle} - Core</name>
<description>Core bundle for ${appTitle}</description>
...
Пример извлечен из проекта Github adobe/aem-project-archetype.В Maven есть хорошая документация, как организовать и создать свой архетип с нуля. Создание архетипа из проектаВ большинстве случаев поддерживать архетип сложно, потому что:
- Это не сам проект, поэтому вам нужно использовать свой архетип, чтобы увидеть, работает ли сгенерированный проект.
- Шаблоны - это хорошо, но их трудно читать, и вам нужно «представить», как будет выглядеть код после.
- Мы ленивы, и если это трудно понять, то будет сложно поддерживать. Люди вернутся к проектам копирования и вставки и заменят текст.
Простой способ обойти все эти ограничения - создать архетип из примера проекта. Наш примерный проект - это идеальный компилируемый проект со всеми желаемыми конфигурациями, которые мы хотим сохранить вместе в клонах. Создайте свой пример проекта для архетипа Некоторые желательные характеристики в проекте примера для архетипа:
- Он должен быть простым, но полным. Не забудьте включить все зависимости и по одному примеру каждого элемента вашего проекта. Например, если проект представляет собой микросервис, имеет смысл включить контроллер, службу и репозиторий.
- Назовите его связным образом (вы увидите это на следующих шагах). Я бы порекомендовал, например, иметь контроллер под названием ArchetypeExampleController, который общается с ArchetypeExampleService.
- В каждом файле поместите один и тот же префикс в переменные, чтобы их было легко заменить. Например, если вам нужна переменная для вашей ArchetypeExampleService, хорошее имя - archetypeVariableService.
- Включите dot-файлы как часть этого проекта и хороший файл readme.
archetype:create-from-projectЦель maven archetype:create-from-project - ключ к созданию архетипа из проекта. В рамках конфигурации вы можете передать файл archetype.properties в качестве параметра. Этот файл свойств должен выглядеть так:
# these are standard properties
package=com.almeida.tomas
groupId=archetype.it
artifactId=basic
version=1.0.0-SNAPSHOT
# here we add our personalized properties
defaultClassPrefix=ArchetypeExample
defaultVariablePrefix=archetypeVariable
Как вы видите выше, я включил только изменяющуюся часть файлов или переменных, и maven позаботится о их замене за меня.Шаг-за-шагомДавайте пройдем все шаги от нашего примера проекта архетипа до нашего архетипа.1. Переименуйте все dot-файлы.Известно, что dot-файлы не включаются в архетип. Поэтому нам нужно переименовать их, чтобы они также были включены в сгенерированный архетип (и последующий проект).
mv .gitignore dot.gitignore
mv .file dot.file
2. Вызовите цель maven с желаемыми параметрами.
mvn -U clean archetype:create-from-project \
-Dinteractive=false \
-DkeepParent=true \
-DpropertyFile=archetype.properties \
-DpackageName=com.almeida.tomas \
-Darchetype.filteredExtensions=java,xml,md
В документации вы можете увидеть больше параметров и узнать, почему и когда они используются, но вкратце:
- -Dinteractive=false: интерактивный режим отключен.
- -DkeepParent=true: оставить родителя.
- -DpropertyFile=archetype.properties: используйте наш файл archetype.properties для проверки переменных.
- -DpackageName=com.almeida.tomas: имя пакета для источников java, который должен быть включен в архетип.
- -Darchetype.filteredExtensions=java,xml,md: файлы с выбранными расширениями будут проверены, а содержимое и имя файлов будут изменены переменными.
3. Очистите сгенерированные метаданные архетипа.В некоторых случаях генерация включает значение свойства по умолчанию, и мы хотим быть уверены, что все значения будут заполнены пользователем.
cd target/generated-sources/archetype/
sed -i 's/.*defaultValue.*//g' src/main/resources/META-INF/maven/archetype-metadata.xml
4. Установите или разверните архетип.Если вы запускаете эти команды локально, архетип в вашем локальном репо:
# be sure to be in the target/generated-sources/archetype folder
mvn -B -U clean install
Я рекомендую настроить задание Jenkins, чтобы каждый раз, когда в проект вносится изменение, Jenkins запускает команды и отправляет новую версию в ваш репозиторий.
# deploy the archetype to repository
mvn -B -U clean deploy
Используйте созданный вами архетипСозданный архетип будет иметь такой же artifactId с суффиксом -archetype. Итак, исходя из нашего примера:
mvn archetype:generate \
-DarchetypeGroupId=tomas.examples \
-DarchetypeArtifactId=archetypeProject-archetype \
-DarchetypeVersion=1.0.0-SNAPSHOT
Теперь нас попросят указать значение для переменных по умолчанию и персонализированных переменных:
Define value for property 'groupId': com.tomas.almeida
Define value for property 'artifactId': demo-project
Define value for property 'version' 1.0-SNAPSHOT: 1.0.0-SNAPSHOT
Define value for property 'package' com.tomas.almeida: com.tomas.almeida.domain
Define value for property 'defaultClassPrefix': Demo
Define value for property 'defaultVariablePrefix': demo
Подтвердите, что значения, которые вы ввели, верны:
Confirm properties configuration:
groupId: com.tomas.almeida
artifactId: demo-project
version: 1.0.0-SNAPSHOT
package: com.tomas.almeida.domain
defaultClassPrefix: Demo
defaultVariablePrefix: demo
Y: : Y
Будет создана новая папка с именем artifacId. В нашем примере demo-project.
cd demo-project
Необходимо переименовать dot-файлы:
mv dot.gitignore .gitignore
mv dot.file .file
Итак, теперь вы можете создать несколько клонов вашего примера проекта архетипа за считанные минуты!
===========
Источник:
habr.com
===========
===========
Автор оригинала: Tomas Dias Almeida
===========Похожие новости:
- [Программирование, Java] Работа с БД с помощью JAVA и JDBC
- [Java] Отладка Java-приложений из командной строки (перевод)
- [JavaScript, Разработка игр, Логические игры] Путеводитель разработчика по Garbo-боту
- [JavaScript, Программирование] Взлом JavaScript с помощью JavaScript (перевод)
- [Java] Выход за рамки Java 8: компактные строки (перевод)
- [Open source, JavaScript, Программирование, Серверное администрирование] zx – bash скрипты на javascript
- [] Софт для учителей и школьников
- [Java] Очень странные вещи c Java Characters (перевод)
- [Разработка веб-сайтов, NoSQL, ReactJS, Serverless] You don't know Redis
- [JavaScript, Node.JS, TypeScript, Микросервисы] Делаем микрообразы с микросервисами
Теги для поиска: #_java, #_maven, #_arhetipy (архетипы), #_java
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 18:31
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Создайте архетип из существующего проекта и сгенерируйте новые клоны с минимальными усилиями. Прекратите копи-паст проектов и создайте архетип! Если вы создаете облако микросервисов или находитесь в среде, где вам нужно сгенерировать несколько проектов или модулей maven, очень полезно создавать архетипы для разработки этих новых модулей/проектов.Что такое архетип?Архетип maven - это шаблонный проект. Maven предлагает несколько архетипов, которые позволяют создавать новые модули maven, готовые к запуску за несколько секунд.Как использовать общий архетип?Использовать архетип довольно просто. Если вы хотите сгенерировать архетип на основе списка по умолчанию, просто запустите: mvn archetype:generate
mvn archetype:generate \
-DarchetypeGroupId=com.adobe.aem \ -D archetypeArtifactId=aem-project-archetype \ -D archetypeVersion=27 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>${groupId}</groupId> <artifactId>${rootArtifactId}</artifactId> <version>${version}</version> <relativePath>../pom.xml</relativePath> </parent> <artifactId>${artifactId}</artifactId> <name>${appTitle} - Core</name> <description>Core bundle for ${appTitle}</description> ...
# these are standard properties
package=com.almeida.tomas groupId=archetype.it artifactId=basic version=1.0.0-SNAPSHOT # here we add our personalized properties defaultClassPrefix=ArchetypeExample defaultVariablePrefix=archetypeVariable mv .gitignore dot.gitignore
mv .file dot.file mvn -U clean archetype:create-from-project \
-Dinteractive=false \ -DkeepParent=true \ -DpropertyFile=archetype.properties \ -DpackageName=com.almeida.tomas \ -Darchetype.filteredExtensions=java,xml,md
cd target/generated-sources/archetype/
sed -i 's/.*defaultValue.*//g' src/main/resources/META-INF/maven/archetype-metadata.xml # be sure to be in the target/generated-sources/archetype folder
mvn -B -U clean install # deploy the archetype to repository
mvn -B -U clean deploy mvn archetype:generate \
-DarchetypeGroupId=tomas.examples \ -DarchetypeArtifactId=archetypeProject-archetype \ -DarchetypeVersion=1.0.0-SNAPSHOT Define value for property 'groupId': com.tomas.almeida
Define value for property 'artifactId': demo-project Define value for property 'version' 1.0-SNAPSHOT: 1.0.0-SNAPSHOT Define value for property 'package' com.tomas.almeida: com.tomas.almeida.domain Define value for property 'defaultClassPrefix': Demo Define value for property 'defaultVariablePrefix': demo Confirm properties configuration:
groupId: com.tomas.almeida artifactId: demo-project version: 1.0.0-SNAPSHOT package: com.tomas.almeida.domain defaultClassPrefix: Demo defaultVariablePrefix: demo Y: : Y cd demo-project
mv dot.gitignore .gitignore
mv dot.file .file =========== Источник: habr.com =========== =========== Автор оригинала: Tomas Dias Almeida ===========Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 18:31
Часовой пояс: UTC + 5