Basic Java Tools for Building & Testing Apps
Скачать 4.76 Mb.
|
Фазы жизненного цикла 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 проекта, требуются некоторые артефакты. Зависимости проекта описываются в секции 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 Но иногда при описании зависимости требуется использовать необязательный параметр 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 В случае необходимости выполнения нестандартных действий в определенной фазе, например, на стадии генерации исходников «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.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 Проектный файл, 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 Секция Данная секция содержит информацию по самой сборке, т.е. где находятся исходные файлы, файлы ресурсов, какие плагины используются. Тестирование проекта 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 Объявление зависимостей заключено в секции net.sf.json-lib json-lib 2.4 jdk15 Классификатор classifier Классификатор |