Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

План Lazybones — «Бездельник», тот, что работает за вас

Anna | 2.06.2014 | нет комментариев
Я не люблю Maven.
О моей пассионарной ненависти к этой штуке дозволено написать не одну статью, но сегодня я хочу побеседовать об одной дюже отличной фиче Мавена — об архетипах. Что это такое дозволено прочитать в официальной документации, в всяком из туторилов по Мавену на Прогре(123), да и вообще, вы наверно знаете и сами.

Так вот, архетипы — это резко, и было бы здорово, если бы 1) во многих планах со стандартной конструкцией они были. 2) дозволено было бы их прикрутить к тем, у которых их нет.

Приблизительно так думал Питер Ледбрук, когда глядел на полное неимение архетапов в Ratpack. Тогда и родился план Lazybones — инструмент генерации планов.

image

В этой статье я расскажу вам как 1) Пользоваться Lazybones для генерации планов, для которых теснее сделаны образцы. 2) Создавать новые образцы для всяких планов.

Применение существующих образцов Lazybones

Tут все будет предельно коротко:

  1. Устанавливаем Lazybones с поддержкой GVM либо скачиваем дистрибутив с Bintray
  2. Глядим какие образцы существуют с поддержкой команды lazybones list (либо постигаемрепозиторий)
  3. Постигаем информацию о выбраном образце с поддержкой команды lazybones info <имя образца>(либо читаем readme в packag-e образца на Бинтрее)
  4. Создаем план командой lazybones create <имя образца> <версия образца> <имя директории в которой создавать>

Всё, спасибо за внимание, все свободны. Правда нет, теперь будем делать как раз увлекательное.

Создание своего образца плана

От того что вы все, скорее каждого, знакомы с мавеновским архетипом #361 (maven-archetype-quickstart), мы сделаем что-то схожее (воссоздав все фичи, мы опустим некоторые повторы).
Немного того, что вы сумеете сравнить число скаченного интернета для создания обоих планов, вы еще и сумеете сравнить трудность создания самого образца, потому как процесс создания архетайпа Мавена восхитительно описан вот здесь.

Выходит, поехали.

Чего мы хотим добиться:

  • Сделать базовый pom.xml с выбраными через интерактивную командную строку groupIdartifactId и версией
  • Сделать директории src/main/java, src/main/resources (тоже самое для тестов, но мы не будем, для простоты примера)
  • Сделать класс для примера, прописать в нем выбранный через интерактивную командную строкуpackage и положить его в походящую под package директорию (тоже самое для теста, но мы не будем, для простоты примера)
  • В классе сгенерить main, тот, что будет при запуске фазы теста печатать сообщение, выбранное через интерактивную командную строку
  • Собрать образец
  • Сделать план по нашему образцу
  • Запустить mvn test
  • Интерес
  1. Для сборки образца нам потребуется скрипт Gradle и директория с образцами. От того что нам лень, мы запустим lazybones:
    >lazybones create lazybones-project lzb-templates
    В итоге у нас есть следующее:

    Map<String,String> props = [:]
    
    //метод ask принимает 2 параметра - сообщение, и значение по умолчанию.
    //он показывает сообщение и ожидает ввода. Ввод (либо значение по умолчанию, если ввод пустой) возвращается.
    props.groupId = ask('Выберите groupId [org.example]: ', 'org.example')
    props.artifactId = ask('Выберите artifactId [maven-simple]: ', 'maven-simple')
    props.version = ask('Выберите версию [1.0-SNAPSHOT]: ', '1.0-SNAPSHOT')
    props.pkg = ask("Выберите package для класса [$props.groupId]:", props.groupId)
    props.message = ask('Чего печатать в тесте? ', 'Здравствуй, бездельник!')
    
    //метод processTemplates обрабатывает образцы, заменяя меаркеры значениями из мапы.
    processTemplates 'pom.xml', props
    
    //заменяем точки на слэши
    String packageDir = props.pkg.replaceAll(/./, '/')
    //переносим исходник в необходимую директорию
    moveFileToDirectory(new File(targetDir, 'App.java'), new File(targetDir, "src/main/java/$packageDir"), true)
    //обрабатываем образец
    processTemplates 'src/main/java/**/App.java', props

    Верю, комментарии довольно ясно поясняют, что происходит. Исключительное, вероятно, что необходимо добавить, это то, что способы ask() и processTemplates() и поле targetDir попадают в скрипт из класса uk.co.cacoethes.lazybones.LazybonesScript, тот, что является кастомным супер-классом этого скрипта.

  2. Пора собирать. У Lazybones есть свой плагин для Грейдла, тот, что теснее сконфигурирован в скрипте сборки, тот, что мы сгенерировали в пункте 1. Данный плагин определяет task rules для сборки, установки в локальном кэше и деплоймента образцов на Бинтрей. От того что образец у нас не серъезный, на Бинтрей мы его класть не будем, а вот установить в кэш, Дабы испробовать запустить — непременно. Запускаем сборку:
    >gradlew installTemplateMavenSimple
    :packageTemplateMavenSimple
    :installTemplateMavenSimple

    BUILD SUCCESSFUL

  3. Тестируем! Создаем новую директорию и в ней создаем план из образца (как мы теснее видели):
    >lazybones create maven-simple 0.1 maven-simple

    Creating project from template maven-simple 0.1 in 'maven-simple'
    Выберите groupId [org.example]: com.demo
    Выберите artifactId [maven-simple]:
    Выберите версию [1.0-SNAPSHOT]: 0.1
    Выберите package для класса [org.example]:org.simple
    Чего печатать в тесте? Здравствуй, Прогр!

    Образец а-ля архетайп
    ---------------------------------
    Ты сотворил Мавеновский план. Может хватит? Грейлд ожидает тебя.

    Project created in maven-simple!

    Сообщение в конце, приходит, безусловно из readme.md. Обратите внимание, я не указал artifactId, жду maven-simple по умолчанию.
    Заходим в директорию maven-simple, и любуемся:

    k!gt;
    </project>

    Всё как нужно. Открываем App.java:

    package org.simple;
    
    public class App {
        public static void main(String[] args) {
            System.out.println(args[0]);
        }
    }
    

    Тоже порядок. Запускаем Мавен:

    >mvn test
    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] Building maven-simple 0.1
    [INFO] ------------------------------------------------------------------------
    [INFO]
    [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-simple ---
    [INFO] Copying 0 resource
    [INFO]
    [INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ maven-simple ---
    [INFO] Nothing to compile - all classes are up to date
    [INFO]
    [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ maven-simple ---
    [INFO]
    [INFO] --- maven-compiler-plugin:2.5.1:testCompile (default-testCompile) @ maven-simple ---
    [INFO] No sources to compile
    [INFO]
    [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ maven-simple ---
    [INFO] No tests to run.
    [INFO]
    [INFO] >>> exec-maven-plugin:1.2.1:java (default) @ maven-simple >>>
    [INFO]
    [INFO] <<< exec-maven-plugin:1.2.1:java (default) @ maven-simple <<<
    [INFO]
    [INFO] --- exec-maven-plugin:1.2.1:java (default) @ maven-simple ---
    Здравствуй, Прогр!
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 0.768s
    [INFO] Finished at: Fri Apr 04 02:54:57 IDT 2014
    [INFO] Final Memory: 7M/304M
    [INFO] ------------------------------------------------------------------------

Вот и всё. Я верю, вы прониклись простотой и изяществом как создания планов из образцов так и созданием самих образцов в Lazybones. Мне кажется, за эти простоту и изящество во многом нужно благодaрить Груви.

Бессовестный пиар, дозволено не читать

Если вам понравилось и вы со мною согласны на счет изящества и простоты, и если вы хотите и сами подучить немного Груви, то приходите ко мне на тренинг 15-го апреля в Казани, либо 17-го апреля в Москве. Обещаю обучить Грувийным плюшкам.

 

 Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB