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

  • Зависимости, dependency

  • Основные исполняемые цели, goal Использование maven

  • Секция свойств maven проекта, properties

  • Кодировка maven проекта

  • Проектный файл, pom.xml Структура проекта описывается в файле pom.xml

  • Предопределёные переменные maven

  • Maven зависимости, dependency

  • 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
    страница2 из 16
    1   2   3   4   5   6   7   8   9   ...   16
    Фазы жизненного цикла site

    pre-site;

    site;

    post-site;

    site-deploy;
    Стандартные жизненные циклы могут быть дополнены функционалом с помощью maven-
    плагинов. Плагины позволяют вставлять в стандартный цикл новые шаги (например, распределение на сервер приложений) или расширять существующие шаги.
    Порядок выполнения команд maven проекта зависит от порядка вызова целей и фаз.
    Следующая команда mvn clean dependency:copy-dependencies package выполнит фазу clean, после этого будет выполнена задача dependency:copy-dependencies, после чего будет выполнена фаза package. Аргументы clean и package являются фазами сборки, dependency:copy-dependencies является задачей.
    Зависимости, dependency
    Зависимость, эта связь, которая говорит, что для некоторых фаз жизненного цикла maven проекта, требуются некоторые артефакты. Зависимости проекта описываются в
    секции файла pom.xml. Для каждого используемого в проекте артефакта необходимо указать GAV (groupId, artifactId, version), где

    groupId - идентификатор производителя объекта. Часто используется схема принятая в обозначении пакетов Java. Например, если производитель имеет домен domain.com, то в качестве значения groupId удобно использовать значение com.domain. То есть, groupId это по сути имя пакета.

    artifactId - идентификатор объекта. Обычно это имя создаваемого модуля или приложения.

    version - версия описываемого объекта. Для незавершенных проектов принято добавлять суффикс SNAPSHOT. Например 1.0-SNAPSHOT.
    Как правило информации GAV достаточно maven'у, для поиска указанного артефакта в репозиториях. Пример описания зависимости библиотеки JDBC для работы с БД Oracle.


    com.oracle


    ojdbc6


    11.2.0.4


    Но иногда при описании зависимости требуется использовать необязательный параметр
    . Следующий пример демонстрирует описание зависимости библиотеки json-lib-2.4-
    jdk15.jar с параметром classifier.


    net.sf.json-lib


    json-lib


    2.4


    jdk15


    Более подробная информация о зависимостях и областях их действия, а также о способе построения транзитивных зависимостей в виде дерева представлена на странице dependency в maven-проекте.
    Плагины, plugins
    Maven базируется на plugin-архитектуре, которая позволяет использовать плагины для различных задач (test, compile, build, deploy и т.п). Иными словами, maven запускает определенные плагины, которые выполняют всю работу. То есть, если мы хотим научить maven особенным сборкам проекта, то необходимо добавить в pom.xml указание на запуск нужного плагина в нужную фазу и с нужными параметрами. Это возможно за счет того, что информация поступает плагину через стандартный вход, а результаты пишутся в его стандартный выход.
    Количество доступных плагинов очень велико и включает разнотипные плагины, позволяющие непосредственно из maven запускать web-приложение для тестирования его в браузере, генерировать Web Services. Главной задачей разработчика в этой ситуации является найти и применить наиболее подходящий набор плагинов.
    В простейшем случае запустить плагин просто - для этого необходимо выполнить команду в определенном формате. Например, чтобы запустить плагин «maven-checkstyle-plugin»
    (artifactId) с groupId равным «org.apache.maven.plugins» необходимо выполнить следующую команду : mvn org.apache.maven.plugins:maven-checkstyle-plugin:check

    Целью (goal) выполнения данного плагина является проверка "check". Можно запустить в более краткой форме : mvn maven
    - checkstyle
    - plugin
    :
    check
    Объявление плагина в проекте похоже на объявление зависимости. Плагины также идентифицируется с помощью GAV (groupId, artifactId, version). Например:


    org.apache.maven.plugins


    maven-checkstyle-plugin


    2.6


    Объявление плагина в pom.xml позволяет зафиксировать версию плагина, задать ему необходимые параметры, определить конфигурационные параметры, привязать к фазам.
    Что касается списка конфигурационных переменных плагина, то его легко можно найти на сайте maven. К примеру, для maven-compiler-plugin, на странице
    Apache Maven Project можно увидеть перечень всех переменных, управляющих плагином.
    Разные плагины вызываются maven'ом на разных стадиях жизненного цикла. Так проект, формирующий настольное java-приложение с использованием библиотек swing или swt, имеет стадии жизненного цикла отличные от тех, что характерны для разработке enterprise application (ear). Еак например, когда выполняется команда «mvn test», инициируeтся целый набор шагов в жизненном цикле проекта: «process-resources”, «compile», «process-classes»,
    «process-test-resources», «test-compile», «test». Упоминания этих фаз отражаются в выводимых maven-ом сообщениях :
    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] Building carousel 1.0-SNAPSHOT
    [INFO] ------------------------------------------------------------------------
    [INFO]
    [INFO] --- maven-resources-plugin:2.6:resources (default-resources) \
    @ carousel ---
    [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) \
    @ carousel
    [INFO] --- maven-resources-plugin:2.6:testResources \
    (default-testResources) @ carousel ---
    [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) \
    @ carousel ---
    [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) \
    @ carousel ---
    [INFO] Surefire report directory: \
    E:\maven.projects\carousel\target\surefire-reports
    -------------------------------------------------------
    T E S T S
    -------------------------------------------------------
    Running ru.carousel.AppTest
    Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.04 sec
    Results :
    Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS

    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 5.042 s
    [INFO] Finished at: 2016-09-24T12:33:45+04:00
    [INFO] Final Memory: 7M/18M
    [INFO] ------------------------------------------------------------------------
    В каждой фазе жизненного цикла проекта вызывается определенный плагин (jar-библиотека), который включает некоторое количество целей (goal). Например, плагин «maven-compiler- plugin» содержит две цели: «compiler:compile» для компиляции основного исходного кода проекта и «compiler:testCompile» для компиляции тестов. Формально, список фаз можно изменять, хотя такая ситуация случается крайне редко.
    В проектном файле pom.xml можно настроить для каждого из плагинов жизненного цикла набор конфигурационных переменных, например :




    maven-compiler-plugin



    true


    C:/Program_Files/Java/jdk1.7.0_67/bin/javac.exe


    1.7


    1.7





    В случае необходимости выполнения нестандартных действий в определенной фазе, например, на стадии генерации исходников «generate-sources», можно добавить вызов соответствующего плагина в файле pom.xml :

    org.apache.maven.plugins


    имя-плагина




    customTask

    generate-sources


    pluginGoal


    Самое важное в данном случае – это определить для плагина наименование фазы
    «execution/phase», в которую нужно встроить вызов цели плагина «goal». Фаза «generate- sources» располагается перед вызовом фазы compile и очень удобна для генерирования части исходных кодов проекта.
    Описание различных плагинов представлено на странице
    Maven плагины для сборки проекта
    Основные исполняемые цели, goal
    Использование maven часто сводится к выполнению одной из команды следующего набора, которые можно назвать целями (по аналогии с другими системами сборки типа ant, make) :

    validate — проверка корректности метаинформации о проекте;

    compile — компилиляция исходников;

    test — прогонка тестов классов;


    package — упаковка скомпилированнных классов в заданный формат (jar или war, к примеру);

    integration-test — отправка упакованных классов в среду интеграционного тестирования и прогонка тестов;

    verify — проверка корректности пакета и удовлетворение требованиям качества;

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

    deploy — отправка пакета на удаленный production сервер, где доступ к нему будет открыт другим разработчикам.
    В общем случае для выполнения команды maven необходимо выполнить следующий код :
    «mvn цель». В качестве параметров указываются не только имена фаз, но и имена и цели плагинов в формате «mvn плагин:цель». Например, вызов фазы цикла «mvn clean» эквивалентен вызову плагина «mvn clean:clean».
    Секция свойств maven проекта, properties
    Отдельные настройки проекта можно определить в переменных. Это может быть связанно, к примеру, с тем, что требуется использовать семейство библиотек определенной версии. Для этого в проектном файле используется секция
    , в которой объявляются переменные. Обращение к переменной выглядит следующим образом : ${имя переменной}.
    Пример описания свойств проекта и их использование :

    4.11


    1.4


    1.6






    junit


    junit


    ${junit.version}


    test






    ${project.artifactId}



    org.apache.maven.plugins


    maven-compiler-plugin


    2.3.2



    ${maven.compiler.source}


    ${maven.compiler.target}





    Кодировка maven проекта
    При выполнении отдельных команд maven, связанных с копированием ресурсов или компиляцией, могут «выплыть» предупреждения о кодировке :
    [INFO]
    [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ ...
    [WARNING] Using platform encoding (Cp1251 actually) to copy filtered resources, i.e. build is platform dependent!
    [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ ...

    [INFO] Changes detected - recompiling the module!
    [WARNING] File encoding has not been set, using platform encoding Cp1251, i.e. build is platform dependent!
    Чтобы обойти эти сообщения, необходимо включить в секцию следующий код с указанием требуемой кодировки :
    UTF-8

    Для просмотра свойств проекта можно использовать плагин «maven-echo-plugin» :

    org.codehaus.gmaven


    groovy-maven-plugin


    2.0



    validate


    execute




    log.info('JUnit версия : {0}', junit.version)





    Проектный файл, pom.xml
    Структура проекта описывается в файле pom.xml, который должен находиться в корневой папке проекта. Содержимое проектного файла имеет следующий вид : 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"
    >

    4.0.0





    ...











    projectName


    ${basedir}/src/java


    ${basedir}/targetDir




    ${basedir}/src/java/resources



    **/*.properties








    Не все секции могут присутствовать в описании pom.xml. Так секции properties и repositories часто не используются. Параметры GAV проекта являются обязательными. Выше на странице было представлено описание использования различных секций. Здесь рассмотрим только секцию .
    Секция build
    Секция также не является обязательной, т. к. существует значение по умолчанию.
    Данная секция содержит информацию по самой сборке, т.е. где находятся исходные файлы, файлы ресурсов, какие плагины используются.

    - наименование результирующего файла сборки (jar, war, ear..), который создаётся в фазе package. Значение по умолчанию — «artifactId-version»;

    - определение месторасположения файлов с исходным кодом. По умолчанию файлы располагаются в директории «${basedir}/src/main/java», но можно определить и в другом месте;

    - определение месторасположения директории, куда компилятор будет сохранять результаты компиляции - *.class файлы. По умолчанию определено значение «target/classes»;

    и вложенные в неё тэги определяют местоположение файлов ресурсов. Ресурсы, в отличие от файлов исходного кода, при сборке просто копируются в директорию, значение по умолчанию которой равно «src/main/resources».
    Тестирование проекта
    Maven позволяет запускать JUnit case приложения на тестирование. Для этого следут выполнить команду "mvn test". Отдельные команды maven, например "mvn verify", автоматически запускают тесты приложения. Тестирование можно запретить на уровне выполнения команды или в секции "properties" файла pom.xml. Подробнее информация о тестировании с использованием maven представлена здесь
    Предопределёные переменные maven
    При описании проекта в pom-файле можно использовать предопределенные переменные. Их можно условно разделить на несколько групп :

    Встроенные свойства проекта : o ${basedir} - корневой каталог проекта, где располагается pom.xml; o ${version} - версия артефакта; можно использовать ${project.version} или
    ${pom.version};


    Свойства проекта. На свойства можно ссылаться с помощью префиксов «project» или
    «pom» : o ${project.build.directory} - «target» директория (можно ${pom.build.directory}); o ${project.build.outputDirectory} - путь к директории, куда компилятор складывает файлы (по умолчанию «target/classes»); o ${project.name} - наименование проекта (можно ${pom.name}); o ${project.version} - версия проекта (можно ${pom.version}).

    Настройки. Доступ к свойствам settings.xml можно получить с помощью префикса settings o ${settings.localRepository} путь к локальному репозиторию
    Maven зависимости, dependency
    Редко когда какой-либо проект обходится без дополнительных библиотек. Как правило, используемые в проекте библиотеки необходимо включить в сборку, если это не проект
    OSGi или WEB (хотя и для них зачастую приходится включать в проект отдельные библиотеки). Для решения данной задачи в maven-проекте необходимо использовать зависимость dependency, устанавливаемые в файле pom.xml, где для каждого используемого в проекте артефакта необходимо указать :

    параметры GAV (groupId, artifactId, version) и, в отдельных случаях, «необязательный» классификатор classifier;

    области действия зависимостей scope (compile, provided, runtime, test, system, import);

    месторасположение зависимости (для области действия зависимости system).
    Параметры GAV

    groupId - идентификатор производителя объекта. Часто используется схема принятая в обозначении пакетов Java. Например, если производитель имеет домен domain.com, то в качестве значения groupId удобно использовать значение com.domain. То есть, groupId это по сути имя пакета.

    artifactId - идентификатор объекта. Обычно это имя создаваемого модуля или приложения.

    version - версия описываемого объекта. Для незавершенных проектов принято добавлять суффикс
    SNAPSHOT
    . Например 1.0.0-SNAPSHOT.
    Значения идентификаторов groupId и artifactId подключаемых библиотек практически всегда можно найти на сайте www.mvnrepository.com
    . Если найти требуемую библиотеку в этом репозитории не удается, то можно использовать дополнительный репозиторий http://repo1.maven.org/maven2
    Cтруктура файла pom.xml и описание секции подключения к проекту репозитория представлены на главной странице фреймворка maven
    Объявление зависимостей заключено в секции .... Количество зависимостей не ограничено. В следующем примере представлено объявление зависимости библиотеки JSON, в которой используется классификатор classifier (в противном случае библиотека не будет найдена в центральном репозитории) :



    net.sf.json-lib


    json-lib


    2.4


    jdk15



    Классификатор classifier
    Классификатор
    1   2   3   4   5   6   7   8   9   ...   16


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