SlideShare a Scribd company logo
1 of 43
Maven 3: уличная магия Алексей Солнцев JEEConf 2011
Обо мне ,[object Object]
Certified Scrum Practitioner
Координатор перевода книг "Scrum and XP from the Trenches“ и“Kanban and Scrum – making the most of both”
Agile тренер в XP Injection,[object Object]
О вас ,[object Object]
Кто использует для сборки Ant?
Кто начал мигрировать на Maven?
Кто уже использует Maven в своём проекте?
Кто считает себя экспертом в Maven?
Кто может собрать проект и задеплоить его на сервер одной командой?,[object Object]
Maven – набор лучших практик
Структура проекта по умолчанию
Куда бы положить исходники? src/    java     tests configs <build> <sourceDirectory>src/java</sourceDirectory> <testSourceDirectory>src/tests</testSourceDirectory> <resources> 	<resource> 		<directory>src/configs</directory> 	 	</resource> </resources> </build>
Общая картина Repository DEPLOY GET GET Plugins POM Artifact Build lifecycle
Project Object Model Зависимости проекта Информация о модулях Плагины и порядок их выполнения Система управления версиями Управление поставкой Информация про разработчиков, лиценизи, систему отслеживания ошибок
Репозитории 90 000 артифактов 70 ГБ  Внутренний Внешние Локальный
Nexus как прокси-сервер От создателей Maven и менеджеров центрального репозитория Возможность загрузки 3rd-party библиотек при помощи веб-интерфейса Поддержка LDAP Планировщик задач Расширенный поиск по библиотекам и именам классов
Конфигурация и использование Увеличьте максимальный объём используемой памяти По возможности используйте Linux-сервер Под Windows используйте специальную конфигурацию Обязательно чистите snapshot-версии А потом не забывайте очистить корзину используя scheduler Делайте дефрагментацию диска binswonfrapper.conf confxamplesetty-faster-windows.xml
Состояние диска (2 месяца работы)
Работа с артефактами Разные типы: jar, war, zip, swf Один модуль –артефактодного типа Координаты  артефакта <dependency><groupId>com.app</groupId>   <artifactId>myapp</artifactId>   <version>1.2.1</version>   <classifier>linux</classifier></dependency> Любая библиотека Результат сборки   Артефакт
Жизненный цикл сборки ,[object Object]
generate-sources, process-sources
generate-resources, process-resources
compile, process-classes
generate-test-sources, process-test-sources
generate-test-resources, process-test-resources
test-compile, process-test-classes
test
prepare-package, package
pre-integration-test, integration-test, post-integration-test
verify, install, deploy,[object Object]
Default goal <project> <build>     <defaultGoal>install</defaultGoal> </build> </project> Возможно прописать только один goal или phase
maven-enforcer-plugin Проверка определённой версииОС,Java и Maven Проверка наличия или отсутствия определённых файлов Возможно запрета использования определённых версий библиотек Возможно написания своих правил и выполнения скриптов
maven-ant-plugin Очень просто Очень полезно
... <dependencies>     <dependency>         <groupId>ant-contrib</groupId>         <artifactId>ant-contrib</artifactId>     </dependency>     <dependency>         <groupId>xdoclet</groupId>         <artifactId>xdoclet-hibernate-module</artifactId>     </dependency> </dependencies>     <executions>       <execution>         <configuration>         <tasks>           <taskdef name="ejbdoclet"  classname="xdoclet.modules.ejb.EjbDocletTask"  classpathref="maven.compile.classpath" />           <taskdef resource="net/sf/antcontrib/antcontrib.properties”/>           <ejbdocletdestDir="${basedir}/src/generated"  ejbspec="2.0” force="false"     verbose="false”/>         </tasks> ... Проблема в Maven2 – невозможно перегрузить зависимости для плагина. Решена в Maven3.
<id>populate</id> <phase>process-resources</phase> <configuration> 	<tasks> 		<property file=“developer.properties" /> 		<ant dir="${basedir}"  antfile="init.xml"  		target="${init}" inheritAll="true"  inheritRefs="true"> <propertyset> 				<propertyref prefix="database." /> 			</propertyset> 			<property name="dataBase" value="${dataBase}” /> 		</ant> 	</tasks> </configuration>
      <plugin>         <artifactId>maven-ant-plugin</artifactId>         <executions>           <execution>             <id>execution1</id>            ...       <goals> <goal>run</goal> </goals>           </execution>           <execution>             <id>execution2</id>             ... 				<goals> <goal>run</goal> </goals>           </execution>         </executions>       </plugin> Порядок выполнения зависит от порядка появления в POM-е, при условии что прописаны id
maven-dependency-plugin Скачать все зависимости mvn dependency:go-offline Древовидная структура списка зависимостей mvn dependency:tree Определение неиспользуемых зависимостей mvn dependency:analyze Исключение транзитных зависимостей будет исправлено в Maven 3.1 [MNG-2315] Анализируйте и исключайте ненужные зависимости
Пример анализа неиспользуемых зависимостей
<*Management> враг “копипаста” <dependencyManagement> Наследование версий зависимостей <pluginManagement> Наследование версий зависимостей и их конфигураций
In the basepom.xml …  <pluginManagement> 	<plugins> 		<plugin>             <groupId>org.apache.maven.plugins</groupId> 			<artifactId>maven-antrun-plugin</artifactId> 			<version>1.1</version> 			<executions> 				<execution> 					<id>echodir</id> 					<goals> 						<goal>run</goal> 					</goals> 					<phase>install</phase> 					<configuration> 						<tasks> <echo>Build Dir: ${project.build.directory}</echo> 						</tasks> 					</configuration> 				</execution> 			</executions> 		</plugin> 	</plugins> </pluginManagement>

More Related Content

What's hot

Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey Rebrov
 
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»WrikeTechClub
 
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с MavenКурс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven7bits
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаSQALab
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Ontico
 
Обзор Continuous integration инструментов
Обзор Continuous integration инструментовОбзор Continuous integration инструментов
Обзор Continuous integration инструментовVitalii Morvaniuk
 
Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Technopark
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыOleg Nenashev
 
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Ontico
 
Gradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для AndroidGradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для AndroidSQALab
 
BDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveBDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveSQALab
 
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo KazymyrovFwdays
 
Application deployment & configuration management
Application deployment & configuration managementApplication deployment & configuration management
Application deployment & configuration managementAlexander Kirillov
 
Selenium grid on-demand
Selenium grid on-demandSelenium grid on-demand
Selenium grid on-demandSQALab
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandexaviatakz
 
Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)Noveo
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаMikhail Chinkov
 
Полный цикл разработки на Python + Django
Полный цикл разработки на Python + DjangoПолный цикл разработки на Python + Django
Полный цикл разработки на Python + DjangoAzamat Tokhtaev
 
Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Alexey Lesovsky
 
Как Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QAКак Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QASQALab
 

What's hot (20)

Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
 
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»
 
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с MavenКурс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)
 
Обзор Continuous integration инструментов
Обзор Continuous integration инструментовОбзор Continuous integration инструментов
Обзор Continuous integration инструментов
 
Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
 
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
 
Gradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для AndroidGradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для Android
 
BDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveBDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehave
 
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
 
Application deployment & configuration management
Application deployment & configuration managementApplication deployment & configuration management
Application deployment & configuration management
 
Selenium grid on-demand
Selenium grid on-demandSelenium grid on-demand
Selenium grid on-demand
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
 
Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
Полный цикл разработки на Python + Django
Полный цикл разработки на Python + DjangoПолный цикл разработки на Python + Django
Полный цикл разработки на Python + Django
 
Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.
 
Как Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QAКак Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QA
 

Viewers also liked

Очень вкусный фрукт Guava
Очень вкусный фрукт GuavaОчень вкусный фрукт Guava
Очень вкусный фрукт GuavaEgor Chernyshev
 
Spring the Ripper by Evgeny Borisov
Spring the Ripper by Evgeny BorisovSpring the Ripper by Evgeny Borisov
Spring the Ripper by Evgeny BorisovJavaDayUA
 
Konstantin slisenko - Spring Framework
Konstantin slisenko - Spring FrameworkKonstantin slisenko - Spring Framework
Konstantin slisenko - Spring Frameworkbeloslab
 
inside dvm internals
inside dvm internalsinside dvm internals
inside dvm internalsMykola Bova
 
Управление проектом в условии неопределённости
Управление проектом в условии неопределённостиУправление проектом в условии неопределённости
Управление проектом в условии неопределённостиAleksey Solntsev
 
141 - Spring. Добавление контроллеров Spring MVC
141 - Spring. Добавление контроллеров Spring MVC141 - Spring. Добавление контроллеров Spring MVC
141 - Spring. Добавление контроллеров Spring MVCRoman Brovko
 
backbase-cxp-datasheet
backbase-cxp-datasheetbackbase-cxp-datasheet
backbase-cxp-datasheetMykola Bova
 
66 - Spring. Spring и JSF
66 - Spring. Spring и JSF66 - Spring. Spring и JSF
66 - Spring. Spring и JSFRoman Brovko
 
Phoenix for Rubyists
Phoenix for RubyistsPhoenix for Rubyists
Phoenix for RubyistsMike North
 
Async Gateway или Разработка системы распределенных вычислений с нуля
Async Gateway или Разработка системы распределенных вычислений с нуляAsync Gateway или Разработка системы распределенных вычислений с нуля
Async Gateway или Разработка системы распределенных вычислений с нуляVitebsk Miniq
 
Hazelcast and MongoDB at Cloud CMS
Hazelcast and MongoDB at Cloud CMSHazelcast and MongoDB at Cloud CMS
Hazelcast and MongoDB at Cloud CMSuzquiano
 
HighLoad++ 2009 In-Memory Data Grids
HighLoad++ 2009 In-Memory Data GridsHighLoad++ 2009 In-Memory Data Grids
HighLoad++ 2009 In-Memory Data GridsAlexey Kharlamov
 
50 nouvelles choses que l'on peut faire en Java 8
50 nouvelles choses que l'on peut faire en Java 850 nouvelles choses que l'on peut faire en Java 8
50 nouvelles choses que l'on peut faire en Java 8José Paumard
 
Алексей Николаенков, Devexperts
Алексей Николаенков, DevexpertsАлексей Николаенков, Devexperts
Алексей Николаенков, DevexpertsNata_Churda
 
Hazelcast for Terracotta Users
Hazelcast for Terracotta UsersHazelcast for Terracotta Users
Hazelcast for Terracotta UsersHazelcast
 
Amazon cloud – готовим вместе
Amazon cloud – готовим вместеAmazon cloud – готовим вместе
Amazon cloud – готовим вместеVitebsk Miniq
 

Viewers also liked (20)

Очень вкусный фрукт Guava
Очень вкусный фрукт GuavaОчень вкусный фрукт Guava
Очень вкусный фрукт Guava
 
Spring the Ripper by Evgeny Borisov
Spring the Ripper by Evgeny BorisovSpring the Ripper by Evgeny Borisov
Spring the Ripper by Evgeny Borisov
 
Konstantin slisenko - Spring Framework
Konstantin slisenko - Spring FrameworkKonstantin slisenko - Spring Framework
Konstantin slisenko - Spring Framework
 
Spring in java
Spring in javaSpring in java
Spring in java
 
inside dvm internals
inside dvm internalsinside dvm internals
inside dvm internals
 
Google Guava
Google GuavaGoogle Guava
Google Guava
 
Управление проектом в условии неопределённости
Управление проектом в условии неопределённостиУправление проектом в условии неопределённости
Управление проектом в условии неопределённости
 
141 - Spring. Добавление контроллеров Spring MVC
141 - Spring. Добавление контроллеров Spring MVC141 - Spring. Добавление контроллеров Spring MVC
141 - Spring. Добавление контроллеров Spring MVC
 
backbase-cxp-datasheet
backbase-cxp-datasheetbackbase-cxp-datasheet
backbase-cxp-datasheet
 
66 - Spring. Spring и JSF
66 - Spring. Spring и JSF66 - Spring. Spring и JSF
66 - Spring. Spring и JSF
 
Maven lifecycle
Maven lifecycleMaven lifecycle
Maven lifecycle
 
Phoenix for Rubyists
Phoenix for RubyistsPhoenix for Rubyists
Phoenix for Rubyists
 
Async Gateway или Разработка системы распределенных вычислений с нуля
Async Gateway или Разработка системы распределенных вычислений с нуляAsync Gateway или Разработка системы распределенных вычислений с нуля
Async Gateway или Разработка системы распределенных вычислений с нуля
 
Hazelcast and MongoDB at Cloud CMS
Hazelcast and MongoDB at Cloud CMSHazelcast and MongoDB at Cloud CMS
Hazelcast and MongoDB at Cloud CMS
 
HighLoad++ 2009 In-Memory Data Grids
HighLoad++ 2009 In-Memory Data GridsHighLoad++ 2009 In-Memory Data Grids
HighLoad++ 2009 In-Memory Data Grids
 
50 nouvelles choses que l'on peut faire en Java 8
50 nouvelles choses que l'on peut faire en Java 850 nouvelles choses que l'on peut faire en Java 8
50 nouvelles choses que l'on peut faire en Java 8
 
Алексей Николаенков, Devexperts
Алексей Николаенков, DevexpertsАлексей Николаенков, Devexperts
Алексей Николаенков, Devexperts
 
Hazelcast for Terracotta Users
Hazelcast for Terracotta UsersHazelcast for Terracotta Users
Hazelcast for Terracotta Users
 
Code review at large scale
Code review at large scaleCode review at large scale
Code review at large scale
 
Amazon cloud – готовим вместе
Amazon cloud – готовим вместеAmazon cloud – готовим вместе
Amazon cloud – готовим вместе
 

Similar to Maven 3 : уличная магия

Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Ontico
 
Client Side Autotesting Flash
Client Side Autotesting FlashClient Side Autotesting Flash
Client Side Autotesting Flashguestb0af15
 
Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayAndrey Rebrov
 
Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?Eugene Zharkov
 
Apache maven in java projects
Apache maven in java projectsApache maven in java projects
Apache maven in java projectsAsya Dudnik
 
Graal, Truffle, SubstrateVM and other perks: what are those and why do you ne...
Graal, Truffle, SubstrateVM and other perks: what are those and why do you ne...Graal, Truffle, SubstrateVM and other perks: what are those and why do you ne...
Graal, Truffle, SubstrateVM and other perks: what are those and why do you ne...Oleg Chirukhin
 
Dev & test на windows azure
Dev & test на windows azureDev & test на windows azure
Dev & test на windows azureMicrosoft
 
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium SQALab
 
Vladimir Trandafilov - When you need your system of cross browser testing
Vladimir Trandafilov - When you need your system of cross browser testingVladimir Trandafilov - When you need your system of cross browser testing
Vladimir Trandafilov - When you need your system of cross browser testingIevgenii Katsan
 
Vagrant: tool for development and testing
Vagrant: tool for development and testingVagrant: tool for development and testing
Vagrant: tool for development and testingStanislavMalkin
 
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...rit2011
 
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко
Solit 2012, Enterprise разработка PHP приложений, Иван ЗахарченкоSolit 2012, Enterprise разработка PHP приложений, Иван Захарченко
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченкоsolit
 
Распределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на JavaРаспределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на Javaaragozin
 
Load testing of web applications
Load testing of web applicationsLoad testing of web applications
Load testing of web applicationsMageCloud
 
Eugene Dmitrichenko - Load testing of web applications
Eugene Dmitrichenko - Load testing of web applicationsEugene Dmitrichenko - Load testing of web applications
Eugene Dmitrichenko - Load testing of web applicationsCiklum Ukraine
 
Cтандартизация рабочего окружения и автоматизация развертывания рабочей среды
Cтандартизация рабочего окружения и автоматизация развертывания рабочей средыCтандартизация рабочего окружения и автоматизация развертывания рабочей среды
Cтандартизация рабочего окружения и автоматизация развертывания рабочей средыWordCamp Kyiv
 
Monitoring and Load testing
Monitoring and Load testingMonitoring and Load testing
Monitoring and Load testingFedor Malyshkin
 
CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники
CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехникиCodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники
CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехникиCodeFest
 
Автоматизированное тестирование - от сложного к простому, или Запускаем автот...
Автоматизированное тестирование - от сложного к простому, или Запускаем автот...Автоматизированное тестирование - от сложного к простому, или Запускаем автот...
Автоматизированное тестирование - от сложного к простому, или Запускаем автот...SQALab
 

Similar to Maven 3 : уличная магия (20)

Практика
ПрактикаПрактика
Практика
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)
 
Client Side Autotesting Flash
Client Side Autotesting FlashClient Side Autotesting Flash
Client Side Autotesting Flash
 
Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps way
 
Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?
 
Apache maven in java projects
Apache maven in java projectsApache maven in java projects
Apache maven in java projects
 
Graal, Truffle, SubstrateVM and other perks: what are those and why do you ne...
Graal, Truffle, SubstrateVM and other perks: what are those and why do you ne...Graal, Truffle, SubstrateVM and other perks: what are those and why do you ne...
Graal, Truffle, SubstrateVM and other perks: what are those and why do you ne...
 
Dev & test на windows azure
Dev & test на windows azureDev & test на windows azure
Dev & test на windows azure
 
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
 
Vladimir Trandafilov - When you need your system of cross browser testing
Vladimir Trandafilov - When you need your system of cross browser testingVladimir Trandafilov - When you need your system of cross browser testing
Vladimir Trandafilov - When you need your system of cross browser testing
 
Vagrant: tool for development and testing
Vagrant: tool for development and testingVagrant: tool for development and testing
Vagrant: tool for development and testing
 
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
 
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко
Solit 2012, Enterprise разработка PHP приложений, Иван ЗахарченкоSolit 2012, Enterprise разработка PHP приложений, Иван Захарченко
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко
 
Распределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на JavaРаспределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на Java
 
Load testing of web applications
Load testing of web applicationsLoad testing of web applications
Load testing of web applications
 
Eugene Dmitrichenko - Load testing of web applications
Eugene Dmitrichenko - Load testing of web applicationsEugene Dmitrichenko - Load testing of web applications
Eugene Dmitrichenko - Load testing of web applications
 
Cтандартизация рабочего окружения и автоматизация развертывания рабочей среды
Cтандартизация рабочего окружения и автоматизация развертывания рабочей средыCтандартизация рабочего окружения и автоматизация развертывания рабочей среды
Cтандартизация рабочего окружения и автоматизация развертывания рабочей среды
 
Monitoring and Load testing
Monitoring and Load testingMonitoring and Load testing
Monitoring and Load testing
 
CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники
CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехникиCodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники
CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники
 
Автоматизированное тестирование - от сложного к простому, или Запускаем автот...
Автоматизированное тестирование - от сложного к простому, или Запускаем автот...Автоматизированное тестирование - от сложного к простому, или Запускаем автот...
Автоматизированное тестирование - от сложного к простому, или Запускаем автот...
 

More from Aleksey Solntsev

Управление сложностью в проектах
Управление сложностью  в проектахУправление сложностью  в проектах
Управление сложностью в проектахAleksey Solntsev
 
Бути IT-шніком та обирати життя в Україні – це реально
Бути IT-шніком та обирати життя в Україні – це реальноБути IT-шніком та обирати життя в Україні – це реально
Бути IT-шніком та обирати життя в Україні – це реальноAleksey Solntsev
 
Управление ожиданиями заказчика при построении R&D центра в Украине
Управление ожиданиями заказчика при построении R&D центра в УкраинеУправление ожиданиями заказчика при построении R&D центра в Украине
Управление ожиданиями заказчика при построении R&D центра в УкраинеAleksey Solntsev
 
NoSQL - взрыв возможностей
NoSQL - взрыв возможностейNoSQL - взрыв возможностей
NoSQL - взрыв возможностейAleksey Solntsev
 
NoSQL: what's under the hood?
NoSQL: what's under the hood? NoSQL: what's under the hood?
NoSQL: what's under the hood? Aleksey Solntsev
 
Облачные вычисления
Облачные вычисленияОблачные вычисления
Облачные вычисленияAleksey Solntsev
 
Ретроспектива: вперёд в прошлое
Ретроспектива: вперёд в прошлоеРетроспектива: вперёд в прошлое
Ретроспектива: вперёд в прошлоеAleksey Solntsev
 
Agile вид из окна тренажёрного зала
Agile   вид из окна тренажёрного залаAgile   вид из окна тренажёрного зала
Agile вид из окна тренажёрного залаAleksey Solntsev
 
How to be proud when you are done
How to be proud when you are doneHow to be proud when you are done
How to be proud when you are doneAleksey Solntsev
 
Первый украинский краудсорсинговый перевод
Первый украинский краудсорсинговый переводПервый украинский краудсорсинговый перевод
Первый украинский краудсорсинговый переводAleksey Solntsev
 
Infopulse: How we do Scrum
Infopulse: How we do ScrumInfopulse: How we do Scrum
Infopulse: How we do ScrumAleksey Solntsev
 

More from Aleksey Solntsev (15)

Управление сложностью в проектах
Управление сложностью  в проектахУправление сложностью  в проектах
Управление сложностью в проектах
 
Бути IT-шніком та обирати життя в Україні – це реально
Бути IT-шніком та обирати життя в Україні – це реальноБути IT-шніком та обирати життя в Україні – це реально
Бути IT-шніком та обирати життя в Україні – це реально
 
Управление ожиданиями заказчика при построении R&D центра в Украине
Управление ожиданиями заказчика при построении R&D центра в УкраинеУправление ожиданиями заказчика при построении R&D центра в Украине
Управление ожиданиями заказчика при построении R&D центра в Украине
 
NoSQL - взрыв возможностей
NoSQL - взрыв возможностейNoSQL - взрыв возможностей
NoSQL - взрыв возможностей
 
NoSQL: what's under the hood?
NoSQL: what's under the hood? NoSQL: what's under the hood?
NoSQL: what's under the hood?
 
Облачные вычисления
Облачные вычисленияОблачные вычисления
Облачные вычисления
 
Ретроспектива: вперёд в прошлое
Ретроспектива: вперёд в прошлоеРетроспектива: вперёд в прошлое
Ретроспектива: вперёд в прошлое
 
Agile вид из окна тренажёрного зала
Agile   вид из окна тренажёрного залаAgile   вид из окна тренажёрного зала
Agile вид из окна тренажёрного зала
 
How to be proud when you are done
How to be proud when you are doneHow to be proud when you are done
How to be proud when you are done
 
Code review
Code reviewCode review
Code review
 
XP Injection
XP InjectionXP Injection
XP Injection
 
Post Agile
Post AgilePost Agile
Post Agile
 
Первый украинский краудсорсинговый перевод
Первый украинский краудсорсинговый переводПервый украинский краудсорсинговый перевод
Первый украинский краудсорсинговый перевод
 
Infopulse: How we do Scrum
Infopulse: How we do ScrumInfopulse: How we do Scrum
Infopulse: How we do Scrum
 
Agile Team
Agile TeamAgile Team
Agile Team
 

Maven 3 : уличная магия

  • 1. Maven 3: уличная магия Алексей Солнцев JEEConf 2011
  • 2.
  • 4. Координатор перевода книг "Scrum and XP from the Trenches“ и“Kanban and Scrum – making the most of both”
  • 5.
  • 6.
  • 9. Кто уже использует Maven в своём проекте?
  • 10. Кто считает себя экспертом в Maven?
  • 11.
  • 12. Maven – набор лучших практик
  • 14. Куда бы положить исходники? src/ java tests configs <build> <sourceDirectory>src/java</sourceDirectory> <testSourceDirectory>src/tests</testSourceDirectory> <resources> <resource> <directory>src/configs</directory> </resource> </resources> </build>
  • 15. Общая картина Repository DEPLOY GET GET Plugins POM Artifact Build lifecycle
  • 16. Project Object Model Зависимости проекта Информация о модулях Плагины и порядок их выполнения Система управления версиями Управление поставкой Информация про разработчиков, лиценизи, систему отслеживания ошибок
  • 17. Репозитории 90 000 артифактов 70 ГБ Внутренний Внешние Локальный
  • 18. Nexus как прокси-сервер От создателей Maven и менеджеров центрального репозитория Возможность загрузки 3rd-party библиотек при помощи веб-интерфейса Поддержка LDAP Планировщик задач Расширенный поиск по библиотекам и именам классов
  • 19.
  • 20. Конфигурация и использование Увеличьте максимальный объём используемой памяти По возможности используйте Linux-сервер Под Windows используйте специальную конфигурацию Обязательно чистите snapshot-версии А потом не забывайте очистить корзину используя scheduler Делайте дефрагментацию диска binswonfrapper.conf confxamplesetty-faster-windows.xml
  • 21. Состояние диска (2 месяца работы)
  • 22. Работа с артефактами Разные типы: jar, war, zip, swf Один модуль –артефактодного типа Координаты артефакта <dependency><groupId>com.app</groupId>   <artifactId>myapp</artifactId>   <version>1.2.1</version>   <classifier>linux</classifier></dependency> Любая библиотека Результат сборки Артефакт
  • 23.
  • 30. test
  • 33.
  • 34. Default goal <project> <build> <defaultGoal>install</defaultGoal> </build> </project> Возможно прописать только один goal или phase
  • 35. maven-enforcer-plugin Проверка определённой версииОС,Java и Maven Проверка наличия или отсутствия определённых файлов Возможно запрета использования определённых версий библиотек Возможно написания своих правил и выполнения скриптов
  • 36. maven-ant-plugin Очень просто Очень полезно
  • 37. ... <dependencies> <dependency> <groupId>ant-contrib</groupId> <artifactId>ant-contrib</artifactId> </dependency> <dependency> <groupId>xdoclet</groupId> <artifactId>xdoclet-hibernate-module</artifactId> </dependency> </dependencies> <executions> <execution> <configuration> <tasks> <taskdef name="ejbdoclet" classname="xdoclet.modules.ejb.EjbDocletTask" classpathref="maven.compile.classpath" /> <taskdef resource="net/sf/antcontrib/antcontrib.properties”/> <ejbdocletdestDir="${basedir}/src/generated" ejbspec="2.0” force="false" verbose="false”/> </tasks> ... Проблема в Maven2 – невозможно перегрузить зависимости для плагина. Решена в Maven3.
  • 38. <id>populate</id> <phase>process-resources</phase> <configuration> <tasks> <property file=“developer.properties" /> <ant dir="${basedir}" antfile="init.xml" target="${init}" inheritAll="true" inheritRefs="true"> <propertyset> <propertyref prefix="database." /> </propertyset> <property name="dataBase" value="${dataBase}” /> </ant> </tasks> </configuration>
  • 39. <plugin> <artifactId>maven-ant-plugin</artifactId> <executions> <execution> <id>execution1</id> ... <goals> <goal>run</goal> </goals> </execution> <execution> <id>execution2</id> ... <goals> <goal>run</goal> </goals> </execution> </executions> </plugin> Порядок выполнения зависит от порядка появления в POM-е, при условии что прописаны id
  • 40. maven-dependency-plugin Скачать все зависимости mvn dependency:go-offline Древовидная структура списка зависимостей mvn dependency:tree Определение неиспользуемых зависимостей mvn dependency:analyze Исключение транзитных зависимостей будет исправлено в Maven 3.1 [MNG-2315] Анализируйте и исключайте ненужные зависимости
  • 42. <*Management> враг “копипаста” <dependencyManagement> Наследование версий зависимостей <pluginManagement> Наследование версий зависимостей и их конфигураций
  • 43. In the basepom.xml … <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>echodir</id> <goals> <goal>run</goal> </goals> <phase>install</phase> <configuration> <tasks> <echo>Build Dir: ${project.build.directory}</echo> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </pluginManagement>
  • 44. In the childpom.xml … <plugins> <plugin> <artifactId>maven-antrun-plugin</artifactId> </plugin> </plugins>
  • 45. build-helper-maven-plugin Добавить директорию с исходниками Добавить директорию с ресурсами Добавить директорию с тестами Задеплоить несколько артефактов Зарезервировать диапазон портов
  • 46. maven-cargo-plugin Install, configure, start, stop container Deploy, undeploy, merge application
  • 47. Командная строка mvn --resume-from client-connector install
  • 48. Командная строка mvn --projects client-connector, rest install
  • 49. Командная строка mvn –projects services --also-make install
  • 50. Командная строка mvn --projects services --also-make-dependents install
  • 51. Отладка Стек-трейс ошибки mvn <anygoal> -e Отладочная информация mvn <anygoal> -X Отладка ядра Maven или плагинов mvnDebug <anygoal> Preparing to Execute Maven in Debug Mode Listening for transport dt_socket at address: 8000 Отладка тестов mvn test -Dmaven.surefire.debug Listening for transport dt_socket at address: 5005
  • 53. Конфигурация памяти (1/3) MAVEN_OPTS=-Xms256m -Xmx850m -XX:MaxPermSize=192m <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> <!-- impl module ishuge and requires at least 768m to compile --> <fork>true</fork> <meminitial>256</meminitial> <maxmem>1024</maxmem> </configuration> </plugin>
  • 54. Конфигурация памяти (2/3) <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <argLine>-Xmx256m</argLine> </configuration> </plugin>
  • 55. Конфигурация памяти (3/3) <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>cobertura-maven-plugin</artifactId> <version>2.5</version> <configuration> <check> <haltOnFailure>false</haltOnFailure> <maxmem>512m</maxmem> </check> <instrumentation> <maxmem>512m</maxmem> </instrumentation> </configuration> </plugin>
  • 56. Будущее: Maven Polyglot http://kaczanowscy.pl/tomek/2010-11/build-script-length-maven3-polyglot-maven-gradle-ant Tomek's Blog http://kaczanowscy.pl/tomek
  • 57. Пример POM файла на Groovy project {   modelVersion '4.0.0'   artifactId 'coc-comparison'   groupId 'grId'   version '1.0-SNAPSHOT'   dependencies {     dependency('commons-lang:commons-lang:2.5')     dependency('junit:junit:4.8.2')   }   properties {     'maven.compiler.target' '1.6'     'maven.compiler.source' '1.6'   } }
  • 58. Нужна помощь? Email: aleksey.solntsev@gmail.com aleksey.solntsev@xpinjection.com Twitter:@a_solntsev LinkedIn: http://www.linkedin.com/in/solntsev

Editor's Notes

  1. http://maven.apache.org/guides/mini/guide-configuring-plugins.html