Как добавить к проекту архетип maven
Перейти к содержимому

Как добавить к проекту архетип maven

  • автор:

Быстрое создание Maven-проекта для Selenium-тестов

Создание Maven-проекта с нуля вручную – занятие довольно утомительное. Надо написать POM-файл, добавить в него все нужные зависимости, создать структуру директорий. Всего этого можно избежать, если взять уже готовый шаблон проекта, распаковать его и слегка подправить – дать проекту уникальное имя, указать номер версии.

К счастью, такая возможность создания проектов из готовых шаблонов уже есть в Maven. Называются такие заготовки “архетипами”, и для создания проекта из архетипа нужно использовать команду mvn archetype:generate , подробнее про неё можно почитать на официальной странице плагина maven-archetype-plugin

Но ведь нужен ещё шаблон, в котором уже настроены все нужные зависимости от Selenium и от тестовых фреймворков.

Чтобы сгенерировать проект для TestNG, надо запустить консоль, перейти в директорию, где должен быть создан проект, и выполнить вот такую команду (в консоли надо всё вводить в одну строчку):

mvn archetype:generate -DarchetypeGroupId=ru.stqa.selenium -DarchetypeArtifactId=webdriver-testng-archetype -DarchetypeVersion=2.0 -DgroupId=com.example -DartifactId=my_example_project

Разумеется, вместо com.example и my_example_project нужно указать ваши собственные значения, и желательно использовать последнюю доступную версию архетипа.

Аналогично создаётся проект, в котором предполагается использовать JUnit, надо лишь заменить параметр archetypeArtifactId :

mvn archetype:generate -DarchetypeGroupId=ru.stqa.selenium -DarchetypeArtifactId=webdriver-junit-archetype -DarchetypeVersion=2.0 -DgroupId=com.example -DartifactId=my_example_project

Ну и для любителей – исходный код архетипов можно найти здесь и здесь.

  • ← Интерация JUnit и TestNG со средами разработки IDEA, Eclipse и NetBeans
  • |
  • Запуск Selenium-тестов в браузере Opera →

Новые публикации

  • Опубликованы материалы конференции SeleniumConf London 2019
  • Запущен новый сайт selenium.dev
  • Вышел релиз Selenium 3.14
  • Вышел релиз Selenium 3.13
  • Вышел релиз Selenium 3.12

Создание архетипа Maven из существующего проекта

Создайте архетип из существующего проекта и сгенерируйте новые клоны с минимальными усилиями. Прекратите копи-паст проектов и создайте архетип!

Если вы создаете облако микросервисов или находитесь в среде, где вам нужно сгенерировать несколько проектов или модулей 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 ниже.

 4.0.0 $ $ $ ../pom.xml  $ $ - Core Core bundle for $ . 

В Maven есть хорошая документация, как организовать и создать свой архетип с нуля.

Создание архетипа из проекта

В большинстве случаев поддерживать архетип сложно, потому что:

  1. Это не сам проект, поэтому вам нужно использовать свой архетип, чтобы увидеть, работает ли сгенерированный проект.
  2. Шаблоны — это хорошо, но их трудно читать, и вам нужно «представить», как будет выглядеть код после.
  3. Мы ленивы, и если это трудно понять, то будет сложно поддерживать. Люди вернутся к проектам копирования и вставки и заменят текст.

Простой способ обойти все эти ограничения — создать архетип из примера проекта. Наш примерный проект — это идеальный компилируемый проект со всеми желаемыми конфигурациями, которые мы хотим сохранить вместе в клонах.

Создайте свой пример проекта для архетипа

Некоторые желательные характеристики в проекте примера для архетипа:

  1. Он должен быть простым, но полным. Не забудьте включить все зависимости и по одному примеру каждого элемента вашего проекта. Например, если проект представляет собой микросервис, имеет смысл включить контроллер, службу и репозиторий.
  2. Назовите его связным образом (вы увидите это на следующих шагах). Я бы порекомендовал, например, иметь контроллер под названием ArchetypeExampleController , который общается с ArchetypeExampleService .
  3. В каждом файле поместите один и тот же префикс в переменные, чтобы их было легко заменить. Например, если вам нужна переменная для вашей ArchetypeExampleService , хорошее имя — archetypeVariableService .
  4. Включите dot-файлы как часть этого проекта и хороший файл readme.
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

Итак, теперь вы можете создать несколько клонов вашего примера проекта архетипа за считанные минуты!

Руководство по архетипу Maven

Архетип Maven — это абстракция своего рода проекта, который может быть воплощен в конкретный индивидуальный проект Maven. Короче говоря, это шаблонный шаблон проекта, из которого создаются другие проекты .

Основным преимуществом использования архетипов является стандартизация разработки проектов и предоставление разработчикам возможности легко следовать передовым методам при более быстрой загрузке своих проектов.

В этом руководстве мы рассмотрим, как создать собственный архетип, а затем как использовать его для создания проекта Maven с помощью плагина maven-archetype-plugin.

2. Дескриптор архетипа Maven

Дескриптор архетипа Maven является сердцем проекта архетипа . Это XML-файл с именем archetype-metadata.xml, расположенный в каталоге META-INF/maven jar-файла.

Он используется для описания метаданных архетипов:

 archetype-descriptor   .   name="custom-archetype">    requiredProperties>   requiredProperty key="foo">   defaultValue>bardefaultValue>   requiredProperty>   requiredProperties>    fileSets>   fileSet filtered="true" packaged="true">   directory>src/main/javadirectory>   includes>   include>**/*.javainclude>   includes>   fileSet>   fileSets>    modules>   module name="sub-module">module>   modules>    archetype-descriptor> 

Тег requiredProperties используется для предоставления свойств во время создания проекта. Таким образом, нам будет предложено указать для них значения с возможностью принять значение по умолчанию.

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

И, используя packaged =»true» в наборе файлов , мы говорим, что выбранные файлы будут добавлены в иерархию папок, указанную свойством пакета .

Если мы хотим сгенерировать многомодульный проект, то теговые модули могут помочь настроить все модули сгенерированного проекта.

Обратите внимание, что этот файл относится к архетипу 2 и выше. В версии 1.0.x файл назывался просто archetype.xml и имел другую структуру.

Для получения дополнительной информации обязательно ознакомьтесь с официальной документацией Apache .

3. Как создать архетип

Архетип — это обычный проект Maven со следующим дополнительным содержимым :

  • src/main/resources/archetype-resources — это шаблон, из которого ресурсы копируются во вновь созданный проект.
  • src/main/resources/META-INF/maven/archetype-metadata.xml : это дескриптор, используемый для описания метаданных архетипов.

Чтобы создать архетип вручную, мы можем начать с недавно созданного проекта Maven, а затем добавить ресурсы, упомянутые выше.

Или мы можем сгенерировать его с помощью плагина archetype-maven-plugin, а затем настроить содержимое каталога archetype-resources и файла archetype-metadata.xml .

Для создания архетипа мы можем использовать:

 mvn archetype:generate -B -DarchetypeArtifactId=maven-archetype-archetype \   -DarchetypeGroupId=maven-archetype \   -DgroupId=com.foreach \   -DartifactId=test-archetype 

Мы также можем создать архетип из существующего проекта Maven:

 mvn archetype:create-from-project 

Он сгенерирован в target/generated-sources/archetype и готов к использованию.

Независимо от того, как мы создали архетип, в итоге мы получим следующую структуру:

archetype-root/ ├── pom.xml └── src  └── main  ├── java  └── resources  ├── archetype-resources  │ ├── pom.xml  │ └── src  └── META-INF  └── maven  └── archetype-metadata.xml 

Теперь мы можем приступить к созданию нашего архетипа, поместив ресурсы в каталог archetype-resources и настроив их в файле archetype-metadata.xml .

4. Создание архетипа

Теперь мы готовы настроить наш архетип. В качестве изюминки этого процесса мы продемонстрируем создание простого архетипа Maven для создания приложения RESTful на основе JAX-RS 2.1.

Назовем его просто maven-archetype .

4.1. Упаковка архетипа

Начнем с изменения pom.xml проекта архетипа, расположенного в каталоге maven-archetype :

 packaging>maven-archetypepackaging> 

Этот тип упаковки доступен благодаря расширению archetype-packaging :

 build>   extensions>   extension>   groupId>org.apache.maven.archetypegroupId>   artifactId>archetype-packagingartifactId>   version>3.0.1version>   extension>   extensions>     build> 

4.2. Добавление pom.xml

Давайте теперь создадим файл pom.xml , расположенный в каталоге ресурсов-архетипов :

 project . >    groupId>$ groupId>   artifactId>$ artifactId>   version>$ version>   packaging>warpackaging>    dependencies>   dependency>   groupId>javax.ws.rsgroupId>   artifactId>javax.ws.rs-apiartifactId>   version>2.1version>   scope>providedscope>   dependency>   dependencies>    project> 

Как мы видим, groupId, ArtiftId и версия параметризованы. Они будут заменены при создании нового проекта из этого архетипа.

Мы можем поместить все необходимое для сгенерированного проекта, например, зависимости и плагины, в pom.xml . Здесь мы добавили зависимость JAX RS, поскольку архетип будет использоваться для создания приложения на основе RESTful.

4.3. Добавление необходимых ресурсов

Затем мы можем добавить код Java для нашего приложения в archetype-resources/src/main/java .

Класс для настройки приложения JAX-RS:

 package $package>;   // import   @ApplicationPath("$")   public class AppConfig extends Application    > 

И класс для пинг-ресурса:

 @Path("ping")   public class PingResource   //.   > 

Наконец, поместите файл конфигурации сервера, server.xml , в archetype-resources/src/main/config/liberty .

4.4. Настройка метаданных

После добавления всех необходимых ресурсов теперь мы можем настроить, какие из них будут скопированы во время генерации через файл archetype-metadata.xml .

Мы можем указать нашему архетипу, что мы хотим, чтобы все исходные файлы Java были скопированы:

 archetype-descriptor   name="maven-archetype">      fileSets>   fileSet filtered="true" packaged="true">   directory>src/main/javadirectory>   includes>   include>**/*.javainclude>   includes>   fileSet>   fileSet>   directory>src/main/config/libertydirectory>   includes>   include>server.xmlinclude>   includes>   fileSet>   fileSets>    archetype-descriptor> 

Здесь мы хотим, чтобы все файлы Java из каталога src/main/java и файл server.xml из каталога src/main/config/liberty были скопированы.

4.5. Установка архетипа

Теперь, когда мы закончили собирать все вместе, мы можем установить архетип, вызвав эту команду:

 mvn install 

На данный момент архетип регистрируется в файле archetype-catalog.xml, расположенном в локальном репозитории Maven, и поэтому готов к использованию.

5. Использование установленного архетипа​

Плагин maven-archetype-plugin позволяет пользователю создать проект Maven с помощью цели generate и существующего архетипа . Для получения дополнительной информации об этом плагине вы можете посетить домашнюю страницу .

Эта команда использует этот плагин для создания проекта Maven из нашего архетипа:

 mvn archetype:generate -DarchetypeGroupId=com.foreach.archetypes  -DarchetypeArtifactId=maven-archetype  -DarchetypeVersion=1.0-SNAPSHOT  -DgroupId=com.foreach.restful  -DartifactId=cool-jaxrs-sample  -Dversion=1.0-SNAPSHOT 

Затем мы должны передать GAV нашего архетипа в качестве аргументов цели maven-archetype-plugin:generate . Мы также можем передать GAV конкретного проекта, который мы хотим сгенерировать, в противном случае мы можем предоставить их в интерактивном режиме.

Таким образом, конкретный сгенерированный проект cool-jaxrs-sample готов к запуску без каких-либо изменений. Итак, мы можем запустить его, просто вызвав эту команду:

 mvn package liberty:run 

Затем мы можем получить доступ к этому URL:

 http://localhost:9080/cool-jaxrs-sample/app-path>/ping 

6. Заключение

В этой статье мы показали, как создать и использовать архетип Maven.

Мы продемонстрировали, как создать архетип, а затем настроить ресурсы шаблона с помощью файла archetype-metadata.xml .

Код, как обычно, можно найти на Github .

Как добавить архетип maven в Intelij IDEA

Я учу Spring и пытался создать проект maven в Community версии. Не нашёл нужный архетип (webapp). И пытался добавить архетип, но он не добавлялся. Проделал операцию 2-3 раза ничего не получилось. Помогите пж

Danial
22.09.21 09:19:03 MSK

Архетип это из терминологии Maven, я так понимаю это шаблоны проектов, ну так создай проект как показано в документации Maven: вводи команды в терминале, проверь созданный проект, убедись что нет ошибок при сборки mvn clean install и затем открой его в Idea.
Если у тебя поставлен plugin Maven в Idea, то может сама настроить конфигурацию по pom.xml.
Все манипуляции проводишь в pom.xml, например добавляешь в pom.xml артефакт (зависимость), если после этого библиотека сама не загрузилась то жмешь в правой панели Maven кнопку Reload All Maven projects. Если не загрузилась опять то читаешь текст ошибки, анализируешь что там сказано и решаешь проблему.

anonymous
( 22.09.21 09:47:37 MSK )

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

А по поводу архетипа: его можно добавить руками, взяв образец с мавен-централа.

Zhbert ★★★★★
( 22.09.21 10:06:15 MSK )
Ответ на: комментарий от Zhbert 22.09.21 10:06:15 MSK

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

Будет. Индексирует любой classpath. Ultimate никогда не ставил, использовал Community даже когда работал на банк на галере среди пользователей Ultimate.

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

Ну и всякая мелочь типа нет поддержки FreeMarker темплейтов, но зато HTML работает отлично и поэтому никаких проблем с использованием thymeleaf. А если в фирме захотят чтоб я правил FreeMarker или Velocity темплейты то пусть они мне оплатят Ultimate.

anonymous
( 22.09.21 10:34:42 MSK )
Ответ на: комментарий от Zhbert 22.09.21 10:06:15 MSK

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

stevejobs ★★★★☆
( 22.09.21 13:49:10 MSK )
Ответ на: комментарий от stevejobs 22.09.21 13:49:10 MSK

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

Ну я про них и говорил.

Zhbert ★★★★★
( 22.09.21 13:50:15 MSK )

Зачем тебе архетип, чувак)

Если у тебя какой-то лютый кастом, то берешь заготовку помника вот отсюда и дальше сам вписываешь, что тебе нужно

А если тебе нужен спринг, то идешь на https://start.spring.io/ и там генеришь себе новый проект под свои нужды

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

stevejobs ★★★★☆
( 22.09.21 13:52:03 MSK )
Ответ на: комментарий от stevejobs 22.09.21 13:52:03 MSK

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

Вот тут удваиваю. Как-то пытался сделать архетипом проект, в итоге плюнул.

Zhbert ★★★★★
( 22.09.21 13:54:46 MSK )
Ответ на: комментарий от Zhbert 22.09.21 13:50:15 MSK

Кажется, при текущем положении вещей джава стала такой сложной, что без код-анализа ее лучше не трогать))

Слава героям, которые умудряются программировать джаву в виме. Такие люди реально существуют и очень страдают

Зачем они это делают, впрочем, неясно. Если нет денег на Алтимейт, то Эклипс со спринговым плагином никто не отменял

stevejobs ★★★★☆
( 22.09.21 13:55:21 MSK )
Ответ на: комментарий от stevejobs 22.09.21 13:55:21 MSK

Слава героям, которые умудряются программировать джаву в виме. Такие люди реально существуют и очень страдают

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

Zhbert ★★★★★
( 22.09.21 13:57:08 MSK )
Ответ на: комментарий от stevejobs 22.09.21 13:55:21 MSK

Такие люди реально существуют и очень страдают

А ты их вживую видел?

MOPKOBKA ★★★
( 22.09.21 13:57:47 MSK )
Ответ на: комментарий от stevejobs 22.09.21 13:55:21 MSK

Зачем они это делают, впрочем, неясно. Если нет денег на Алтимейт, то Эклипс со спринговым плагином никто не отменял

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

Zhbert ★★★★★
( 22.09.21 13:58:13 MSK )
Ответ на: комментарий от MOPKOBKA 22.09.21 13:57:47 MSK

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

Zhbert ★★★★★
( 22.09.21 13:58:28 MSK )
Ответ на: комментарий от Zhbert 22.09.21 13:54:46 MSK

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

можно элементарно форкнуть мавен и добавить всё нужное, но кто об этом форке узнает?

stevejobs ★★★★☆
( 22.09.21 13:59:09 MSK )
Ответ на: комментарий от Zhbert 22.09.21 13:58:28 MSK

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

MOPKOBKA ★★★
( 22.09.21 13:59:44 MSK )
Ответ на: комментарий от stevejobs 22.09.21 13:59:09 MSK

#ненужно, совсем уже вы там охренели, не можете в помник руками XML тэги дописывать, какие-то команды в командной строке хотите!

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

Zhbert ★★★★★
( 22.09.21 14:00:40 MSK )
Ответ на: комментарий от MOPKOBKA 22.09.21 13:59:44 MSK

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

Ну не факт. Тут шизиков полно =)

Zhbert ★★★★★
( 22.09.21 14:01:05 MSK )
Ответ на: комментарий от MOPKOBKA 22.09.21 13:57:47 MSK

например, это джаваскрипт-разработчики, которым временами нужно пердолить на сервере не только Ноду, но еще и джаву (микросервисы на разном бывают написаны)

вкатиться в простой сервер на жс или го, или руби с пайтоном можно довольно быстро. А вот от того, сколько в джаве слоёв ынтерпрайзного нужно познать и прикрутить какой-то тулинг — у человека духовно неподготовленного вызывает взрывной бугурт

я своими глазами видел, как суперсиньёрный жс-разработчик из Гугла по SSH уныло пытался wget-ом скачать мавен и потом в терминале и виме создавал структуру проекта для вебаппа. Было очень горько за джаву. И причём, ничем не поможешь же тут.

stevejobs ★★★★☆
( 22.09.21 14:02:51 MSK )
Последнее исправление: stevejobs 22.09.21 14:03:41 MSK (всего исправлений: 1)

Ответ на: комментарий от Zhbert 22.09.21 14:00:40 MSK

ИМХО, не вижу ничего такого в том, чтобы добавить зависимость в ХМЛ, не так уж это запарно…

ну например, мне иногда нужно генерировать проекты, чтобы собирать кастомные сборки

иногда мне нужно делать новые проекты из командной строки, например всякие микросервисы-однострочники, которые берут на вход HTTP GET ?q=, процессят параметр одной строчкой и отдают ниже по пайплайну

какая-то элементарная команда вроде «mvnx add spring latest» у меня написана уже, конечно. Тупо парсю XML, втыкаю куда надо, всё вы таком духе.

или например, «mvnx upgrade all latest-stable»

или например, динамические версии корневого проекта, в зависимости от переменных окружения (у меня это сделано экстеншеном, когда-то скопипащенным у… атлассиана?)

Вопрос в том, что это мог бы сделать и основной проект Мавена. Я даже предлагал влить этот код им. Только вот от идеи команды для апгрейда версий мантейнеры пришли в ужас. Типа, поощряет плохие практики, версии нужно хорошо обдумывать головой и сложность изменения — это хорошо, а не нравится — валите в этот ваш джаваскрипт, а у нас тут есть свой бог — Ынтерпрайз

Услышав эти слова, Заратустра поклонился святому и сказал: «Что мог бы я дать вам! Позвольте мне скорее уйти, чтобы чего-нибудь я не взял у вас!»

Так разошлись они в разные стороны, старец и человек, и каждый смеялся, как смеются дети.

Но когда Заратустра остался один, говорил он так в сердце своем: «Возможно ли это! Этот святой старец в своем лесу еще не слыхал о том, что Бог мертв».

stevejobs ★★★★☆
( 22.09.21 14:11:30 MSK )
Ответ на: комментарий от stevejobs 22.09.21 14:02:51 MSK

MOPKOBKA ★★★
( 22.09.21 14:18:55 MSK )
Ответ на: комментарий от stevejobs 22.09.21 13:55:21 MSK

Я вот нынче helidon se пробую. И ты знаешь — офигенная штука. Вообще никакой магии, обычная жава. Вот мой main:

 public static void main(String[] args) < LogConfig.configureRuntime(); log = Logger.getLogger(Main.class.getName()); var config = Config.create(); var appConfig = config.get("app"); var serverConfig = config.get("server"); var routing = Routing.builder() .register("/sync", new SyncService(appConfig)) .build(); var webServer = WebServer.builder(routing) .config(serverConfig) .build(); webServer.start() .thenAccept(ws -> < log.info("Web server is available at http://127.0.0.1:" + ws.port() + "/"); getRuntime().addShutdownHook(new Thread(() ->ws.shutdown().await())); >) .exceptionallyAccept(e -> < log.log(SEVERE, "Web server startup failed", e); >); > 

Вот мой хэндлер (кусок)

 @Override public void update(Routing.Rules rules) < rules.post("//", this::postHandler); > private void postHandler(ServerRequest request, ServerResponse response) < request.headers().contentType().ifPresent(contentType -> < if (!contentType.equals(APPLICATION_XML)) < throw new HttpException("Unsupported Media Type", UNSUPPORTED_MEDIA_TYPE_415); >>); String endpoint = request.path().param("endpoint"); String service = request.path().param("service"); EndpointData endpointData = appConfig.get("endpoint." + endpoint).as(EndpointData::fromConfig).orElseThrow(() -> new HttpException("endpoint", BAD_REQUEST_400)); ServiceData serviceData = appConfig.get("service." + service).as(ServiceData::fromConfig).orElseThrow(() -> new HttpException("service", BAD_REQUEST_400)); request.content().as(byte[].class) .onError(response::send) .flatMapSingle(body -> processRequest(endpointData, serviceData, body)) .forSingle(responseBody -> < response.headers().contentType(APPLICATION_XML); response.send(responseBody); >); > 

Один минус — асинхронное дерьмо. Но с этим ещё долго жить. Впрочем в спринг его тоже умудряются протащить. В остальном только плюсы. Стартует моментально. Память жрёт умеренно, в JVM режиме пустой сервер я запустил на -Xmx6m. В теории компилируется граалем. Под капотом netty, то бишь работает настолько быстро, насколько только возможно. Сам проект самый, что ни на есть, обычный и скучный мавен. Там какие-то плагины есть, но что они делают, я до сих пор не понимаю, по-моему ничего не делают. Единственное — я не по их quickstart-у делал, а ручками, но это мелочи.

Мне пока очень даже нравится. Все строительные блоки есть. Да, там где у спринга будет аннотация, тут я руками две строчки напишу, но мне это больше по душе.

Тут даже модули прописаны у всех библиотек. Я впечатлился и в своё приложение тоже module-info.java добавил, прикольно, никогда так не делал.

Legioner ★★★★★
( 22.09.21 15:59:49 MSK )
Последнее исправление: Legioner 22.09.21 16:02:52 MSK (всего исправлений: 3)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *