Главная страница
Навигация по странице:

  • Введение. Сборка проекта

  • Репозитории проекта, repositories

  • Терминология maven В maven

  • Фазы жизненного цикла clean pre-clean; clean; post-clean. Фазы жизненного цикла default

  • Basic Java Tools for Building & Testing Apps


    Скачать 4.76 Mb.
    НазваниеBasic Java Tools for Building & Testing Apps
    АнкорJUNIt
    Дата14.11.2022
    Размер4.76 Mb.
    Формат файлаpdf
    Имя файла5_2_0_Maven_JUnit_Tutorial.pdf
    ТипРеферат
    #787190
    страница1 из 16
      1   2   3   4   5   6   7   8   9   ...   16

    Basic Java Tools for
    Building & Testing Apps
    Maven
    JUnit
    Gradle
    Mockito

    Содержание
    1. Building. Maven - 2 2. Building. Gradle - 48 3. Testing. Junit - 104 4. Testing. Mockito -115 5. Testing. Junit5 - 123 6. Testing. Design - 150
    Введение. Сборка проекта
    Одним из важных аспектов подготовки нового релиза приложения являются не только сборка проекта, но также и его тестирование. Здесь следует отметить, что грамотно определенный процесс тестирования приложения позволяет выполнить не только функциональное тестирование, но также модульное и интеграционное тестирование.
    Автоматизация процесса сборки программного продукта связана с разработкой различных скриптов для выполнения таких действий, как :

    компиляция исходного кода в бинарный;

    сборка бинарного кода;

    разворачивание программы на сервере (удаленном компьютере);

    оформление сопроводительной документации или описание изменений.
    Процесс разработки проекта группой программистов включает сборку очередной версии проекта, после которого необходимо выполнить тестирование этой версии. Чтобы собрать очередную версию, ответственный за сборку должен получить последние версии файлов, обновить номер версии (релиза), собрать проект и, если все пройдет успешно, выложить готовый проект для тестирования в определенное место. При этом необходимо использовать определенные библиотеки. Соответственно переход на новую версию программного продукта или одной из библиотек может вызвать множество проблем: сборка новой версии может оказаться неработоспособной и придется откатываться на старую версию и т.п.
    Таким образом, автоматизация процесса сборки проекта становится неотъемлемой частью процесса разработки. С развитием интегрированных средств разработки (IDE Eclipse,
    NetBeans, IntelliJ IDEA и т.п.) стало ясно, что пакетные файлы для автоматизации сборки уже не соответствуют современным требованиям. Появились новые системы автоматизации сборки
    Apache Ant, Apache Maven.
    Apache Ant (
    http://ant.apache.org
    ) сталлогическим продолжением make, схожий по принципу работы инструмент, основной задачей которого была обеспечить автоматизацию процесса сборки Java приложений. Ant - это императивная командная система, созданная для кроссплатформенного применения. Изначально ant разрабатывался для сборки и компановки java-проектов.
    Для java-разработчиков большой проблемой применения пакетных файлов было то, что они сильно завязаны на команды операционной системы (OC). В случае, если необходимо было обеспечить сборку проекта в разных операционных системах, то нужно было использовать не только разные наборы и параметры команд, но и формат командных файлов. Разработка
    собственного командного файла сборки под каждую платформу – это не лучший выбор для кроссплатформенных приложений. В результате Apache Ant был спроектирован таким образом, что часто применяемые при сборке команды ОС обернуты внутренними командами ant
    , а скрипты сборки описываются в формате XML.
    Широкое распространение получила декларативная система автоматизации сборки Apache
    Maven согласно описанию проектного pom.xml файла формата XML. В файлах проекта pom.xml содержатся не отдельные команды, а описание проекта. Все задачи по обработке файлов maven выполняет с использованием плагинов.
    В настоящее время maven развился в специализированную комплексную систему управления сложным процессом создания программного обеспечения и представляет собой обобщенную систему управления разработкой с огромным количеством дополнительных возможностей, применяемых в большинстве сценариев разработки ПО. Многие среды разработки приложений для языка Java обеспечивают интеграцию с этой системой.
    Неоспоримым преимуществом maven является автоматическое управление зависимостями, хорошая структурированность проектов и отсутствие скриптов сборки как таковых, а следовательно проблем с ними. К недостаткам этой системы обычно относят сложности в изучении и трудность диагностики проблем при сборке. Также следует отметить сложности в поиске нужных maven плагинов и их настройке.
    В связи с большим объемом информации по Apache Maven на сайте представлено несколько страниц, где можно ближе познакомиться с общим описанием данного программного продукта и его возможностями, а также увидеть многочисленные примеры использования данной системы.

    Фреймворк Apache Maven
    Apache Maven предназначен для автоматизации процесса сборки проектов на основе описания их структуры в файле на языке POM (Project Object Model), который является подмножеством формата XML. maven позволяет выполнять компиляцию кодов, создавать дистрибутив программы, архивные файлы jar/war и генерировать документацию. Простые проекты maven может собрать в командной строке. Название программы maven вышло из языка идиш, смысл которого можно выразить как «собиратель знания».
    В отличие от ant с императивной сборкой проекта, maven обеспечивает декларативную сборку проекта. То есть, в файле описания проекта содержатся не отдельные команды выполнения, а спецификация проекта. Все задачи по обработке файлов maven выполняет посредством их обработки последовательностью встроенных и внешних плагинов.
    Если описать maven на одной странице сайта, да еще привести примеры использования, то содержимое будет «нечитабельным» - это слишком большой объём информации для представления далеко не всех его возможностей. Поэтому описание разнесено по нескольким страницам. На этой странице представлено общее описание maven. На странице
    Примеры проектов maven описано использование maven для разнотипных проектов. Отдельными страницами представлено «применение maven в IDE Eclipse» (в разработке) и «плагины maven» (в разработке).
    Инсталляция maven
    Последнюю версию maven можно скачать в виде zip-архива со страницы загрузки на официальном сайте
    . После этого необходимо выполнить несколько шагов :

    распаковать архив в инсталляционную директорию. Например в директорию C:\maven- x.y.z в Windows или /opt/maven-x.y.z в Linux

    установить переменную окружения M2_HOME : o в Windows кликните правой кнопкой мыши на «Мой компьютер» и откройте окно
    Свойства/«Дополнительные параметры»/«Переменные среды»/«Системные переменные», в котором добавьте «M2_HOME» = "C:\maven-x.y.z\"; o в Linux можно добавить строку «export M2_HOME=/opt/maven-x.y.z» в файл
    /etc/profile;

    Внесите изменения в переменную окружения PATH : o в Windows в переменную PATH добавьте строку %M2_HOME%\bin; o в Linux можно добавить строку «export PATH=$PATH:$M2_HOME/bin» в файл
    /etc/profile;
    Чтобы убедиться, что maven установлен, необходимо в командной строке ввести следующую команду : mvn -–version
    Должна появиться информация о версиях maven, jre и операционной системе типа :

    Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-
    10T19:41:47+03:00)
    Maven home: C:\apache-maven-3.3.9
    Java version: 1.7.0_79, vendor: Oracle Corporation
    Java home: C:\Program Files\Java\jdk1.7.0_79\jre
    Default locale: ru_RU, platform encoding: Cp1251
    OS name: "windows 8.1", version: "6.3", arch: "amd64", family: "windows"
    При инсталляции maven'a будет создан локальный репозиторий в вашей личной папке
    ${user.home}\.m2\repository. После этого можно считать, что maven готов к работе и можно приступать к созданию проектов сборки приложений.
    Одной из привлекательных особенностей maven'a является справка online, работоспособность которой можно проверить после инсталляции. К примеру справку по фазе компиляции можно получить следующей командой : mvn help
    :
    describe
    -
    Dcmd
    =
    compile
    В результате Вы увидите следующую справочную информацию :
    [INFO] 'compile' is a phase corresponding to this plugin: org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
    It is a part of the lifecycle for the POM packaging 'jar'.
    This lifecycle includes the following phases:
    * validate: Not defined
    * initialize: Not defined
    * generate-sources: Not defined
    * process-sources: Not defined
    * generate-resources: Not defined
    * process-resources: \ org.apache.maven.plugins:maven-resources-plugin:2.6:resources
    * compile: org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
    * process-classes: Not defined
    * generate-test-sources: Not defined
    * process-test-sources: Not defined
    * generate-test-resources: Not defined
    * process-test-resources: \ org.apache.maven.plugins:maven-resources-plugin:2.6:testResources
    * test-compile: \ org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile
    * process-test-classes: Not defined
    * test: org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test
    * prepare-package: Not defined
    * package: org.apache.maven.plugins:maven-jar-plugin:2.4:jar
    * pre-integration-test: Not defined
    * integration-test: Not defined
    * post-integration-test: Not defined
    * verify: Not defined
    * install: org.apache.maven.plugins:maven-install-plugin:2.4:install
    * deploy: org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 0.742 s
    [INFO] Finished at: 2016-09-19T22:41:26+04:00
    [INFO] Final Memory: 7M/18M
    [INFO] ------------------------------------------------------------------------
    Репозитории проекта, repositories

    Под репозиторием (repository) понимается, как правило, внешний центральный репозиторий, в котором собрано огромное количество наиболее популярных и востребованных библиотек, и локальный репозиторий, в котором хранятся копии используемых ранее библиотек.
    Дополнительные репозитории, необходимые для сборки проекта, перечисляются в секции проектного файла pom.xml :



    repo1.maven.org


    http://repo1.maven.org/maven2




    Можно создать и подключать к проектам свой репозиторий, содержимое которого можно полностью контролировать и сделать его доступным для ограниченного количества пользователей. Доступ к содержимому репозитория можно ограничивать настройками безопасности сервера так, что код ваших проектов не будет доступен из вне. Существуют несколько реализаций серверов - репозиториев maven; к наиболее известным относятся artifactory
    , continuum
    , nexus
    Таким образом, репозиторий - это место, где хранятся файлы jar, pom, javadoc, исходники и т.д. В проекте могут быть использованы :

    центральный репозиторий, доступный на чтение для всех пользователей в интернете;

    внутренний «корпоративный» репозиторий - дополнительный репозиторий группы разработчиков;

    локальный репозиторий, по умолчанию расположен в ${user.home}/.m2/repository - персональный для каждого пользователя.
    Для добавления, к примеру, библиотеки carousel-lib.jar в локальный репозиторий можно использовать команду mvn install (команда должна быть однострочной) : mvn install
    :
    install
    - file \
    -
    Dfile
    =
    $
    {
    FILE_PATH
    }/
    carousel
    - lib jar \
    -
    DgroupId
    =
    ru carousel \
    -
    DartifactId
    =
    carousel
    - lib \
    -
    Dversion
    =
    1.0
    \
    -
    Dpackaging
    =
    jar \
    -
    DgeneratePom
    =
    true
    В локальном репозитории «.m2» maven создаст директорию ru/carousel, в которой разместит данную библиотеку и создаст к ней описание в виде pom.xml.
    Репозиторий можно также разместить внутри проекта. Описания процесса создания и размещения репозитория внутри проекта с примером можно прочитать здесь
    Собстенные наработки можно подключить как системную зависимость
    Терминология maven
    В maven используется свой набор терминов и понятий. Ключевым понятием maven является артефакт (artifact) — это, по сути, любая библиотека, хранящаяся в репозитории, к которой можно отнести зависимость или плагин.
    Зависимости
    (dependencies) представляют собой библиотеки, которые непосредственно используются в проекте для компиляции или тестирования кода.

    При сборке проекта или для каких-то других целей (deploy, создание файлов проекта для
    Eclipse и др.) maven использует плагины
    (plugin).
    Еще одним важным понятием maven проекта является архетип (archetype) - это некая стандартная компоновка каталогов и файлов в проектах различного типа (web, maven, swt/swing-проекты и прочие). Иными словами maven знает, как построить структуру проекта в соответствии с его архетипом.
    Архетипы maven
    Количество архетипов у maven'a огромно, «на разный вкус». Как правильно выбрать нужный, чтобы создать архитектуру будущего проекта? Просматривать в консоли не очень удобно, тем более что их количество переваливает за 1500 (к примеру для версии maven 3.3.9 на моем компьютере их 1665). Поэтому можно скачать их в отдельный файл, а потом со всем этим хозяйством разбираться. Для этого необходимо выполнить следующую команду : mvn archetype:generate > archetypes.txt
    В результате в файле archetypes.txt можно увидеть, что-то подобное
    [
    INFO
    ]
    Scanning for projects
    [
    INFO
    ]
    [
    INFO
    ]
    -------------------------------------------------------------------
    [
    INFO
    ]
    Building
    Maven
    Stub
    Project
    (
    No
    POM
    )
    1
    [
    INFO
    ]
    -------------------------------------------------------------------
    [
    INFO
    ]
    [
    INFO
    ]
    >>>
    maven
    - archetype
    - plugin
    :
    2.4
    :
    generate
    (
    default
    - cli
    )
    >
    generate
    - sources
    @
    standalone
    - pom
    >>>
    [
    INFO
    ]
    [
    INFO
    ]
    <<<
    maven
    - archetype
    - plugin
    :
    2.4
    :
    generate
    (
    default
    - cli
    )
    <
    generate
    - sources
    @
    standalone
    - pom
    <<<
    [
    INFO
    ]
    [
    INFO
    ]
    maven
    - archetype
    - plugin
    :
    2.4
    :
    generate
    (
    default
    - cli
    )
    @
    standalone
    - pom
    [
    INFO
    ]
    Generating project in
    Interactive mode
    [
    INFO
    ]
    No archetype defined
    Using maven
    - archetype
    - quickstart \
    (
    org apache maven archetypes
    :
    maven
    - archetype
    - quickstart
    :
    1.0
    )
    Choose archetype
    :
    1
    :
    remote
    ->
    am ik archetype
    :
    maven
    - reactjs
    - blank
    - archetype
    (
    Blank
    Project for
    React js
    )
    2
    :
    remote
    ->
    am ik archetype
    :
    msgpack
    - rpc
    - jersey
    - blank
    - archetype
    (
    Blank
    Project for
    Spring
    Boot
    +
    Jersey
    )
    3
    :
    remote
    ->
    am ik archetype
    :
    mvc
    -
    1.0
    - blank
    - archetype
    (
    MVC
    1.0
    Blank
    Project
    )
    4
    :
    remote
    ->
    am ik archetype
    :
    spring
    - boot
    - blank
    - archetype
    (
    Blank
    Project for
    Spring
    Boot
    )
    5
    :
    remote
    ->
    am ik archetype
    :
    spring
    - boot
    - docker
    - blank
    - archetype
    (
    Docker
    Blank
    Project for
    Spring
    Boot
    )
    При выполнении данной команды maven, после скачивания информации в файл, ожидает поступления команды пользователя. Т.е., находится в ожидании интерактивного ввода команд по созданию проекта определенного типа. Если файл уже создан, то прервите выполнение команды двойным нажатием клавишам Ctrl+C.
    Для создания простенького maven проекта «carousel» (карусель) необходимо выполнить следующую команду : mvn archetype
    :
    generate \
    -
    DgroupId
    =
    ru carousel \
    -
    DartifactId
    =
    carousel \

    -
    Dversion
    =
    1.0
    -
    SNAPSHOT \
    -
    DarchetypeArtifactId
    =
    maven
    - archetype
    - quickstart
    На странице
    Примеры maven проектов подробно описываются разнотипные maven проекты - проект консольного приложения без зависимостей, приложение с графическим интерфейсом и с зависимостями, web-приложение с фреймворком.
    Архитектура простого maven проекта
    Следующая структура показывает директории простого maven проекта.
    Проектный файл pom.xml располагается в корне каталога.

    src: исходные файлы;

    src/main: исходные коды проекта;

    src/main/java: исходные java-файлы;

    src/main/resources: ресурсные файлы, которые используются при компиляции или исполнении, например properties-файлы;

    src/test: исходные файлы для организации тестирования;

    src/test/java: JUnit-тест-задания для автоматического тестирования;

    target: создаваемые в процессе работы maven'a файлы для сборки проекта.
    В зависимости от типа приложения (консольное, с интерфейсом, web, gwt и т.д.) структура может отличаться. В директории target maven собирает проект (jar/war).
    На официальном сайте Apache Maven Project можно получить дополнительную информацию об архетипах (
    Introduction to Archetypes
    ).
    Жизненный цикл maven проекта
    Жизненный цикл maven проекта – это чётко определённая последовательность фаз.
    Когда maven начинает сборку проекта, он проходит через определённую последовательность фаз, выполняя задачи, указанные в каждой из фаз. Maven имеет 3 стандартных жизненных цикла :

    clean — жизненный цикл для очистки проекта;


    default — основной жизненный цикл;

    site — жизненный цикл генерации проектной документации.
    Каждый из этих циклов имеет фазы pre и post. Они могут быть использованы для регистрации задач, которые должны быть запущены перед и после указанной фазы.
    Фазы жизненного цикла clean

    pre-clean;

    clean;

    post-clean.
    Фазы жизненного цикла default

    validate - выполнение проверки, является ли структура проекта полной и правильной;

    generate-sources - включение исходного кода в фазу;

    process-sources - подготовка/обработка исходного кода; например, фильтрация определенных значений;

    generate-resources - генерирование ресурсов, которые должны быть включены в пакет;

    process-resources - копирование ресурсов в указанную директорию (перед упаковкой);

    compile - компиляция исходных кодов проекта;

    process-test-sources - обработка исходных кодов тестов;

    process-test-resources - обработка ресурсов для тестов;

    test-compile - компиляция исходных кодов тестов;

    test - собранный код тестируется, используя приемлемый фреймворк типа
    JUnit
    ;

    package - упаковка откомпилированных классов и прочих ресурсов в дистрибутивный формат;

    integration-test - программное обеспечение в целом или его крупные модули подвергаются интеграционному тестированию. Проверяется взаимодействие между составными частями программного продукта;

    install - установка программного обеспечения в maven-репозиторий, чтобы сделать его доступным для других проектов;

    deploy - стабильная версия программного обеспечения копируется в удаленный maven- репозиторий, чтобы сделать его доступным для других пользователей и проектов;
      1   2   3   4   5   6   7   8   9   ...   16


    написать администратору сайта