SlideShare a Scribd company logo
1 of 23
Download to read offline
Технологии разработки программного обеспечения
(практика)
Мартынов Семён, Хозяинов Иван
Санкт-Петербургского политехнического университета Петра Великого
Института компьютерных наук и технологий
Кафедра компьютерных систем и программных технологий
18 ноября 2017 г.
Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 1 / 23
Содержание
1 Итоги прошлого семинара
Итоги теста
Тестирование
2 CPP-world
Makefile
CMake
Ninja
3 Java-world
Apache Ant
Apache Maven
Gradle Build Tool
4 Заключение
Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 2 / 23
Итоги теста
Всего сдано работ: 22 (-1)
Сколько сказали, что сделали ДЗ: 12.5 человек
Уровень владения git: A22 = 3.95, Var = 2.04
Отличия Docker от VirtualBox и LXC: 9 ответов можно развивать
Задача на поиск повторов: 14 решений нормальные
Деплой приложения с MongoDB: 4 человека на побоялись написать
Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 3 / 23
Тестирование
ФИО, Группа?
Сделал(а) ли я ДЗ?
Как я оцениваю свой уровень владения makefile?
В какой ситуации использование svn может быть более
предпочтительно, чем git?
Написать программу, которая будет вычислять сумму чисел нацело
делящихся на введённое пользователем число. Цикл задать от 0 до
введенного с клавиатуры числа.
Вход: 5 200
Выход: 4100
Как разрешить конфликт слияния в git?
Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 4 / 23
Разбор ДЗ
Вопросы?
Нет чёткой постановки задачи?
Нет чёткого дедлайна?
Работу могут украсть?
Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 5 / 23
Makefile
Стюарт Фельдман (Stuart Feldman), 1977 год (Bell Labs);
Президент ACM, 2006 – 2008.
Синтаксис makefile
цель1 цель2 ...: реквизит1 реквизит2 ...
команда1
команда2
...
Цели
all
clean
install/uninstall
Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 6 / 23
Makefile
Пример makefile
TARGET = hello
PREFIX = /usr/local/bin
.PHONY: all clean install uninstall
all: $(TARGET)
clean:
rm -rf $(TARGET) *.o
main.o: main.c
gcc -c -o main.o main.c
hello.o: hello.c
gcc -c -o hello.o hello.c
$(TARGET): main.o hello.o
gcc -o $(TARGET) main.o hello.o
install:
install $(TARGET) $(PREFIX)
uninstall:
rm -rf $(PREFIX)/$(TARGET)
Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 7 / 23
CMake
CMake – кроссплатформенная система сборки проектов.
Используют:
cURL
LLVM and Clang
Mir
MiKTeX
MySQL and MariaDB
OGRE
Qt (*)
ReactOS
Synergy
zlib
ZeroMQ
Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 8 / 23
CMake
Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 9 / 23
CMake
Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 10 / 23
CMake
Пример cmake
cmake_minimum_required(VERSION 2.8)
project(cmake-example)
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
find_package(Boost COMPONENTS chrono filesystem REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall")
set(SRC_LIST lib1/main.cpp lib2/main.cpp main.cpp)
add_executable(${PROJECT_NAME} ${SRC_LIST})
target_link_libraries(${PROJECT_NAME} ${Boost_LIBRARIES})
Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 11 / 23
CMake
Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 12 / 23
The Ninja build system
Эван Мартин (Evan Martin), 2012 год (Google).
Распределённая система сборки, используется для Google Chrome.
Пример cmake
cc = clang
cflags = -Weverything
rule compile
command = $cc $cflags -c $in -o $out
rule link
command = $cc $in -o $out
build hello.o: compile hello.c
build hello: link hello.o
default hello
Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 13 / 23
Java-world
Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 14 / 23
Apache Ant
Apache Ant (Another Neat Tool) – платформонезависимая утилита для
автоматизации процесса сборки программного продукта (аналог make).
Всего имеет около 150 команд, основные:
echo – вывод сообщений в консоль
mkdir – создание директорий
delete – удаление файлов и директорий
javac – компиляция Java–кода
java – запуск class и jar файлов
jar – создание jar файлаМартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 15 / 23
Apache Ant
Пример buil.xml
<?xml version="1.0"?>
<project name="HelloWorld" default="run">
<target name="compile">
<mkdir dir="build/classes"/>
<javac destdir="build/classes" includeantruntime="false
<src path="src"/>
</javac>
</target>
<target name="run" depends="compile">
<java classname="HelloWorld" classpath="build/classes"/
</target>
<target name="clean">
<delete dir="build"/>
</target>
</project>
Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 16 / 23
Apache Maven
Apache Maven (коллекционер знаний) – фреймворк для
автоматизации сборки.
Maven принёс в разработку:
автоматическое управление зависимостями
единый формат описания артефактов (POM)
управление результатами сборки
Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 17 / 23
Apache Maven
Жизненный цикл:
validate – проверяет корректность метаинформации о проекте
compile – компилирует исходники
test – прогоняет тесты классов из предыдущего шага
package – упаковывает скомпилированные классы в jar
integration-test – отправляет упакованные классы в среду
интеграционного тестирования
verify – проверяет корректность пакета и удовлетворение
требованиям качества
install – отправляет пакет в локальный репозиторий,
deploy – отправляет пакет на удаленный production сервер
Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 18 / 23
Apache Maven
Пример pom.xml
<project 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
<modelVersion>4.0.0</modelVersion>
<groupId>ru.spbstu.icc.kspt</groupId>
<artifactId>my-project</artifactId>
<version>1.0-SNAPSHOT</version>
</project>
Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 19 / 23
Gradle Build Tool
Gradle – система автоматической сборки, позволяющая использовать
сценарии на языке Groovy.
Позволяет изменять порядок этапов жизненного цикла на основе DAG.
Поддерживает инкрементальные сборки.
Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 20 / 23
Gradle Build Tool
Пример build.gradle
apply plugin: ’java’
version = ’1.0’
repositories {
mavenCentral()
}
dependencies {
compile group: ’commons-collections’, name: ’commons-collec
testCompile group: ’junit’, name: ’junit’, version: ’4.7’
}
Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 21 / 23
Gradle Build Tool
Пример таска из build.gradle
task upper << {
String someString = ’mY_nAmE’
println "Original: " + someString
println "Upper case: " + someString.toUpperCase()
4.times { print "$it " }
}
запуск примера
>gradle -q upper
Original: mY_nAmE
Upper case: MY_NAME
0 1 2 3
Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 22 / 23
ДЗ:
Реализовать автоматическую сборку докер-образа с исполняемым
файлом.
Запускается Docker-образ с Gradle
Собирает Java-приложение
Собирает Docker-образ с Java-приложением
Перед началом работы, получить issue в git hub.
Вопросы?
Замечания?
Дополнения?
Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 23 / 23

More Related Content

What's hot

Абак Пресс
Абак ПрессАбак Пресс
Абак Пресс
it-people
 

What's hot (20)

Введение в maven
Введение в mavenВведение в maven
Введение в maven
 
Docker integration into Badoo
Docker integration into BadooDocker integration into Badoo
Docker integration into Badoo
 
Hunting for a C++ package manager
Hunting for a C++ package managerHunting for a C++ package manager
Hunting for a C++ package manager
 
системы сборок проектов
системы сборок проектовсистемы сборок проектов
системы сборок проектов
 
poudriere или как я перестал волноваться и полюбил pkg
poudriere или как я перестал волноваться и полюбил pkgpoudriere или как я перестал волноваться и полюбил pkg
poudriere или как я перестал волноваться и полюбил pkg
 
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
 
Обзор Linux Control Groups
Обзор Linux Control GroupsОбзор Linux Control Groups
Обзор Linux Control Groups
 
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-выводКурс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
 
Микросервисы: взгляд сверху и в бок
Микросервисы: взгляд сверху и в бокМикросервисы: взгляд сверху и в бок
Микросервисы: взгляд сверху и в бок
 
Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)
 
Непрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеНепрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в Яндексе
 
Testing with Selenium
Testing with SeleniumTesting with Selenium
Testing with Selenium
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ci
 
Groovy
GroovyGroovy
Groovy
 
Абак Пресс
Абак ПрессАбак Пресс
Абак Пресс
 
Software engineering seminars: git
 Software engineering seminars: git Software engineering seminars: git
Software engineering seminars: git
 
Как приручить реактивное программирование
Как приручить реактивное программированиеКак приручить реактивное программирование
Как приручить реактивное программирование
 
Continuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под LinuxContinuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под Linux
 
Мониторь, автоматизируй Docker
Мониторь, автоматизируй DockerМониторь, автоматизируй Docker
Мониторь, автоматизируй Docker
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
 

Similar to Software engineering seminars: gradle

Пространственно-распределенная мультикластерная вычислительная система: архит...
Пространственно-распределенная мультикластерная вычислительная система: архит...Пространственно-распределенная мультикластерная вычислительная система: архит...
Пространственно-распределенная мультикластерная вычислительная система: архит...
Mikhail Kurnosov
 
[Data Science MeetUp] Neural Network - Константин Созыкин (RoadAR): Современн...
[Data Science MeetUp] Neural Network - Константин Созыкин (RoadAR): Современн...[Data Science MeetUp] Neural Network - Константин Созыкин (RoadAR): Современн...
[Data Science MeetUp] Neural Network - Константин Созыкин (RoadAR): Современн...
Provectus
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
Ontico
 

Similar to Software engineering seminars: gradle (20)

Software engineering seminars: Docker
Software engineering seminars: DockerSoftware engineering seminars: Docker
Software engineering seminars: Docker
 
Software engineering seminars: jenkins
Software engineering seminars: jenkinsSoftware engineering seminars: jenkins
Software engineering seminars: jenkins
 
Владимир Гриненко —Инструменты фронтенд-разработчика
Владимир Гриненко —Инструменты фронтенд-разработчикаВладимир Гриненко —Инструменты фронтенд-разработчика
Владимир Гриненко —Инструменты фронтенд-разработчика
 
Пространственно-распределенная мультикластерная вычислительная система: архит...
Пространственно-распределенная мультикластерная вычислительная система: архит...Пространственно-распределенная мультикластерная вычислительная система: архит...
Пространственно-распределенная мультикластерная вычислительная система: архит...
 
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
 
Знакомство с WebAssembly
Знакомство с WebAssemblyЗнакомство с WebAssembly
Знакомство с WebAssembly
 
[Data Science MeetUp] Neural Network - Константин Созыкин (RoadAR): Современн...
[Data Science MeetUp] Neural Network - Константин Созыкин (RoadAR): Современн...[Data Science MeetUp] Neural Network - Константин Созыкин (RoadAR): Современн...
[Data Science MeetUp] Neural Network - Константин Созыкин (RoadAR): Современн...
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
 
Сергей Татаринцев — bem-tools v1.0.0
Сергей Татаринцев — bem-tools v1.0.0Сергей Татаринцев — bem-tools v1.0.0
Сергей Татаринцев — bem-tools v1.0.0
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
 
DC/OS more than PAAS
DC/OS more than PAASDC/OS more than PAAS
DC/OS more than PAAS
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)
 
Actor model. Futures and Promises. Reactive Streams.
Actor model. Futures and Promises. Reactive Streams.Actor model. Futures and Promises. Reactive Streams.
Actor model. Futures and Promises. Reactive Streams.
 
Фреймворк Akka и его использование в Яндексе
Фреймворк Akka и его использование в ЯндексеФреймворк Akka и его использование в Яндексе
Фреймворк Akka и его использование в Яндексе
 
pgday17. How shared memory works in modern PostgreSQL
pgday17. How shared memory works in modern PostgreSQLpgday17. How shared memory works in modern PostgreSQL
pgday17. How shared memory works in modern PostgreSQL
 
Урок 4. Node pac.pdf
Урок 4. Node pac.pdfУрок 4. Node pac.pdf
Урок 4. Node pac.pdf
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
 
Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...
 

More from Semen Martynov

More from Semen Martynov (8)

Software engineering seminars: jira
 Software engineering seminars: jira Software engineering seminars: jira
Software engineering seminars: jira
 
Исследование характеристик динамического предсказания ветвлений в конвейере с...
Исследование характеристик динамического предсказания ветвлений в конвейере с...Исследование характеристик динамического предсказания ветвлений в конвейере с...
Исследование характеристик динамического предсказания ветвлений в конвейере с...
 
Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц
Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матрицКэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц
Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц
 
Корпоративная культура организации: примеры и формирование
Корпоративная культура организации: примеры и формированиеКорпоративная культура организации: примеры и формирование
Корпоративная культура организации: примеры и формирование
 
Исследование работы Кэш-памяти центрального процессора
Исследование работы Кэш-памяти центрального процессораИсследование работы Кэш-памяти центрального процессора
Исследование работы Кэш-памяти центрального процессора
 
Введение в динамический анализ приложений на примере Intel Pin
Введение в динамический анализ приложений на примере Intel PinВведение в динамический анализ приложений на примере Intel Pin
Введение в динамический анализ приложений на примере Intel Pin
 
Dauria aerospace
Dauria aerospaceDauria aerospace
Dauria aerospace
 
Задача выделения объекта на изображении: хаотично-фазовая синхронизация и аси...
Задача выделения объекта на изображении: хаотично-фазовая синхронизация и аси...Задача выделения объекта на изображении: хаотично-фазовая синхронизация и аси...
Задача выделения объекта на изображении: хаотично-фазовая синхронизация и аси...
 

Software engineering seminars: gradle

  • 1. Технологии разработки программного обеспечения (практика) Мартынов Семён, Хозяинов Иван Санкт-Петербургского политехнического университета Петра Великого Института компьютерных наук и технологий Кафедра компьютерных систем и программных технологий 18 ноября 2017 г. Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 1 / 23
  • 2. Содержание 1 Итоги прошлого семинара Итоги теста Тестирование 2 CPP-world Makefile CMake Ninja 3 Java-world Apache Ant Apache Maven Gradle Build Tool 4 Заключение Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 2 / 23
  • 3. Итоги теста Всего сдано работ: 22 (-1) Сколько сказали, что сделали ДЗ: 12.5 человек Уровень владения git: A22 = 3.95, Var = 2.04 Отличия Docker от VirtualBox и LXC: 9 ответов можно развивать Задача на поиск повторов: 14 решений нормальные Деплой приложения с MongoDB: 4 человека на побоялись написать Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 3 / 23
  • 4. Тестирование ФИО, Группа? Сделал(а) ли я ДЗ? Как я оцениваю свой уровень владения makefile? В какой ситуации использование svn может быть более предпочтительно, чем git? Написать программу, которая будет вычислять сумму чисел нацело делящихся на введённое пользователем число. Цикл задать от 0 до введенного с клавиатуры числа. Вход: 5 200 Выход: 4100 Как разрешить конфликт слияния в git? Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 4 / 23
  • 5. Разбор ДЗ Вопросы? Нет чёткой постановки задачи? Нет чёткого дедлайна? Работу могут украсть? Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 5 / 23
  • 6. Makefile Стюарт Фельдман (Stuart Feldman), 1977 год (Bell Labs); Президент ACM, 2006 – 2008. Синтаксис makefile цель1 цель2 ...: реквизит1 реквизит2 ... команда1 команда2 ... Цели all clean install/uninstall Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 6 / 23
  • 7. Makefile Пример makefile TARGET = hello PREFIX = /usr/local/bin .PHONY: all clean install uninstall all: $(TARGET) clean: rm -rf $(TARGET) *.o main.o: main.c gcc -c -o main.o main.c hello.o: hello.c gcc -c -o hello.o hello.c $(TARGET): main.o hello.o gcc -o $(TARGET) main.o hello.o install: install $(TARGET) $(PREFIX) uninstall: rm -rf $(PREFIX)/$(TARGET) Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 7 / 23
  • 8. CMake CMake – кроссплатформенная система сборки проектов. Используют: cURL LLVM and Clang Mir MiKTeX MySQL and MariaDB OGRE Qt (*) ReactOS Synergy zlib ZeroMQ Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 8 / 23
  • 9. CMake Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 9 / 23
  • 10. CMake Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 10 / 23
  • 11. CMake Пример cmake cmake_minimum_required(VERSION 2.8) project(cmake-example) set(Boost_USE_STATIC_LIBS OFF) set(Boost_USE_MULTITHREADED ON) find_package(Boost COMPONENTS chrono filesystem REQUIRED) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall") set(SRC_LIST lib1/main.cpp lib2/main.cpp main.cpp) add_executable(${PROJECT_NAME} ${SRC_LIST}) target_link_libraries(${PROJECT_NAME} ${Boost_LIBRARIES}) Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 11 / 23
  • 12. CMake Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 12 / 23
  • 13. The Ninja build system Эван Мартин (Evan Martin), 2012 год (Google). Распределённая система сборки, используется для Google Chrome. Пример cmake cc = clang cflags = -Weverything rule compile command = $cc $cflags -c $in -o $out rule link command = $cc $in -o $out build hello.o: compile hello.c build hello: link hello.o default hello Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 13 / 23
  • 14. Java-world Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 14 / 23
  • 15. Apache Ant Apache Ant (Another Neat Tool) – платформонезависимая утилита для автоматизации процесса сборки программного продукта (аналог make). Всего имеет около 150 команд, основные: echo – вывод сообщений в консоль mkdir – создание директорий delete – удаление файлов и директорий javac – компиляция Java–кода java – запуск class и jar файлов jar – создание jar файлаМартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 15 / 23
  • 16. Apache Ant Пример buil.xml <?xml version="1.0"?> <project name="HelloWorld" default="run"> <target name="compile"> <mkdir dir="build/classes"/> <javac destdir="build/classes" includeantruntime="false <src path="src"/> </javac> </target> <target name="run" depends="compile"> <java classname="HelloWorld" classpath="build/classes"/ </target> <target name="clean"> <delete dir="build"/> </target> </project> Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 16 / 23
  • 17. Apache Maven Apache Maven (коллекционер знаний) – фреймворк для автоматизации сборки. Maven принёс в разработку: автоматическое управление зависимостями единый формат описания артефактов (POM) управление результатами сборки Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 17 / 23
  • 18. Apache Maven Жизненный цикл: validate – проверяет корректность метаинформации о проекте compile – компилирует исходники test – прогоняет тесты классов из предыдущего шага package – упаковывает скомпилированные классы в jar integration-test – отправляет упакованные классы в среду интеграционного тестирования verify – проверяет корректность пакета и удовлетворение требованиям качества install – отправляет пакет в локальный репозиторий, deploy – отправляет пакет на удаленный production сервер Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 18 / 23
  • 19. Apache Maven Пример pom.xml <project 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 <modelVersion>4.0.0</modelVersion> <groupId>ru.spbstu.icc.kspt</groupId> <artifactId>my-project</artifactId> <version>1.0-SNAPSHOT</version> </project> Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 19 / 23
  • 20. Gradle Build Tool Gradle – система автоматической сборки, позволяющая использовать сценарии на языке Groovy. Позволяет изменять порядок этапов жизненного цикла на основе DAG. Поддерживает инкрементальные сборки. Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 20 / 23
  • 21. Gradle Build Tool Пример build.gradle apply plugin: ’java’ version = ’1.0’ repositories { mavenCentral() } dependencies { compile group: ’commons-collections’, name: ’commons-collec testCompile group: ’junit’, name: ’junit’, version: ’4.7’ } Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 21 / 23
  • 22. Gradle Build Tool Пример таска из build.gradle task upper << { String someString = ’mY_nAmE’ println "Original: " + someString println "Upper case: " + someString.toUpperCase() 4.times { print "$it " } } запуск примера >gradle -q upper Original: mY_nAmE Upper case: MY_NAME 0 1 2 3 Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 22 / 23
  • 23. ДЗ: Реализовать автоматическую сборку докер-образа с исполняемым файлом. Запускается Docker-образ с Gradle Собирает Java-приложение Собирает Docker-образ с Java-приложением Перед началом работы, получить issue в git hub. Вопросы? Замечания? Дополнения? Мартынов Семён, Хозяинов Иван ТРПО (практика) 18 ноября 2017 г. 23 / 23