SlideShare a Scribd company logo
1 of 18
Download to read offline
Еволюція систем автоматичної збірки.
Порівняння із Ant’ом та Maven’ом
Зміст
1. Що таке Gradle ? Основні можливості .
2. Основи скриптової мови (Groovy)
3. Управління залежностями та зв’язками
4. Збираємо багато проектів одночасно
5. Плагіни
1. Java
2. War, Ear
3. Eclipse, Eclipse-wtp
6. Робота із система безперервної інтеграції (continuous integration
– Jenkins, Hudson)
Що таке Gradle ? Основні можливості.
• Гнучкий інструмент для автоматичної збірки (build tool)
назразок Ant’у
• Поставляється разом із build description language (DSL) на основі
Groovy
• Як і Maven побудований на принципі - build-by-convention
• Дуже гнучкий та легко розширюваний.
• Містить вбудовані плагіни для Java, Eclipse, Scala, Groovi, Web,
OSGi
• Потужна підтримка для збірки багатьох проектів одночасно
(multi-project builds)
• Керування залежностями (dependency management) побудована
на основі Apache Ivy
• Повністю інтегрований із Ant, Maven та Ivy. Підтримує їх
структуру репозиторіїв.
• Безкоштовний та з відкритим кодом
• Паралельне виконання юніт тестів
• Підтримка послідовних збірок (incremental builds)
• Динамічні таски та правила для тасків
+ гнучкість
+ залежність тасків
+ контроль над процесом
+ різні таски на кожну задачу
- важкі build.xml
- тяжко підтримувати
+ керування залежностями
+ плагіни
+ збірка багатьох модулів проекту
+ угода по конфігурації (convention over
configuration)
- важкі pom.xml
- тяжко перевизначити
поведінку по замовчуванні
+ DSL , замість XML
легкість кастомізації
Основи скриптової мови (Groovy)
task hello << {
println 'Hello world!'
}
D:@gradlehello.world>gradle hello
:hello
Hello world!
BUILD SUCCESSFUL
Дві основні концепції: проекти та таски.
Gradle task == Ant target
task intro(dependsOn: hello) << {
println "I'm Gradle"
}
1. Hello World
2. Залежності між тасками
D:@gradlehello.world>gradle intro
:intro
Hello world!
I'm Gradle
BUILD SUCCESSFUL
4.times { counter ->
task "task$counter" << {
println "I'm task number $counter"
}
}
D:@gradlehello.world>gradle task1
:task1
I'm task number 1
BUILD SUCCESSFUL
task0.dependsOn task2, task3
3. Динамічні таски
4. Маніпулювання тасками
D:@gradlehello.world>gradle task0
:task0
I'm task number 2
I'm task number 3
I'm task number 0
BUILD SUCCESSFUL
task0.doFirst {
println ‘before task hook'
}
task0.doLast {
println ‘after task hook'
}
D:@gradlehello.world>gradle task0
:task0
before task hook
I'm task number 0
after task hook
BUILD SUCCESSFUL
taskGraph
Управління залежностями та зв’язками
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
testCompile group: 'junit', name: 'junit', version: '4.+'
}
compile Залежності необхідні на етапі компіляції проекту з сорсів
runtime Залежності необхідні для зкомпільованих класів в рантаймі. Також
включають в себе compile залежності
testCompile Залежності необхідні для компіляції тест сорсів. Також включають в себе
compile залежності та зкомпільовані класи
testRuntime Залежності необхідні для запуску тестів. Включає compile, compiled classes,
testCompile
Репозиторії:
• основний Maven,
• віддалені Maven / Ivy,
• локальні Maven / Ivy
repositories {
ivy {
url "../local-repo"
}
maven {
url "http://repo.company.com/maven2"
}
}
Збираємо багато проектів одночасно
• Необхідно створити settings.gradle файл у якому вказати які проекти включати.
• Можна задати дефолтні налаштування для всіх підпроектів за допомогою
subprojects {}
• Можна задати залежності між проектами. Таким чином можна регулювати
порядок білдання підпроектів.
include "shared", "api", "services:webservice", "services:shared"
dependencies { compile project(':shared') }
subprojects {
apply plugin: 'java‘ apply plugin: 'eclipse-wtp'
repositories {
mavenCentral()
}
dependencies {
testCompile 'junit:junit:4.11'
}
}
Плагіни
• Додають таски до проекту
• Налаштовують додані таски значеннями по-замовчуванню
• Додають налаштування залежностей
• Додають нові властивості та методи до існуючого типу через
розширення
java announce war checkstyle project-report
groovy application java-library-distribution codenarc signing
scala build-announcements ivy-publish eclipse sonar
antlr ear maven-publish eclipse-wtp
cpp jetty maven2Gradle findbugs
cpp-exe maven build-dashboard idea
cpp-liv osgi pmd jdepend
Java Плагін
compileJava processResources clean
classes javadoc
compileTestJava processTestResources jar
testClasses
test uploadArchives
check assemble
build
<project name="simple" default="dist" basedir=".">
<property name="src" location="src/main/java" />
<property name="srcTest" location="src/test/java" />
<property name="build" location="build" />
<property name="dist" location="${build}/lib" />
<path id="classpath.test">
<pathelement location="libs/junit-4.8.1.jar" />
<pathelement location="${srcTest}" />
<pathelement location="${build}/classes" />
<pathelement location="${build}/test-classes" />
</path>
<target name="init">
<mkdir dir="${build}/classes" />
<mkdir dir="${build}/test-classes" />
</target>
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${build}/classes" />
</target>
<target name="testCompile" depends="init">
<javac srcdir="${srcTest}" destdir="${build}/test-classes">
<classpath refid="classpath.test" />
</javac>
</target>
<target name="test" depends="testCompile">
<junit fork="yes" haltonfailure="yes">
<batchtest fork="yes">
<fileset dir="${srcTest}">
<include name="**/*Test.java" />
<include name="**/Test*.java" />
</fileset>
</batchtest>
<classpath refid="classpath.test" />
<formatter type="plain"/>
</junit>
</target>
<target name="dist" depends="compile">
<mkdir dir="${dist}" />
<jar jarfile="${dist}/simple.jar" basedir="${build}/classes" />
</target>
<target name="clean">
<delete dir="${build}" />
</target>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<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
http://maven.apache.org/maven-v4_0_0.xsd"
>
<modelVersion>4.0.0</modelVersion>
<groupId>pl.gradle</groupId>
<artifactId>simple</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
apply plugin: 'java'
version = '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testCompile 'junit:junit:4.8.1'
}
javaProject
War, Ear
classes assemblewar. ear
Структура проекту:
apply plugin: 'java'
version = '1.0'
jar {
manifest {
attributes 'Implementation-Title': 'Java Project', 'Implementation-Version':
version
}
}
repositories {
mavenCentral()
}
dependencies {
compile group: 'commons-collections', name: 'commons-collections', version:
'3.2'
testCompile group: 'junit', name: 'junit', version: '4.+'
}
test {
systemProperties 'property': 'value'
}
uploadArchives {
repositories {
flatDir {
dirs 'repos'
}
}
}
earWithWar
Eclipse, Eclipse-wtp
eclipseProject генерує .project файл
eclipseClasspath генерує .classpathфайл
eclipseJdt генерує .settings/org.eclipse.jdt.core.prefs файл
eclipseWtpComponent генерує .settings/org.eclipse.wst.common.component файл
eclipseWtpFacet генерує .settings/org.eclipse.wst.common.project.facet.core.xml файл
eclipse генерує всі конфігураційні файл
clean, clean… видаляє відповідні файли
Кожен із згенерованих файлів можна модифікувати за допомогою хуків.
Процес генерації файлів виглядає наступним чином:
1. Читається відповідний файл, або якщо такого файлу не існує то
використовується дефолтовий передбачений Gradle’ом.
2. Виконується beforeMerged хук із об’єктом, який представляє
відповідний файл.
3. Поточний контент файлу об’єднується із налаштуваннями з білд
скрипту або дефолтовими з Gradle’ у
4. Виконується whenMerged хук із об’єктом, який представляє вміст
результуючого файлу
5. Виконується withXml хук із XML представленням результуючого
файлу
6. Створюється фінальний XML файл
apply plugin: 'war'
apply plugin: 'eclipse'
repositories {
mavenCentral()
}
dependencies {
compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
testCompile group: 'junit', name: 'junit', version: '4.+'
}
eclipse.classpath.file {
beforeMerged { classpath ->
classpath.entries.removeAll { entry -> entry.kind == 'lib' || entry.kind ==
'var' }
}
whenMerged { classpath ->
classpath.entries.findAll { entry -> entry.kind == 'lib' }*.exported = false
}
}
apply plugin: 'eclipse-wtp'
eclipse.wtp.facet.file.withXml { provider ->
provider.asNode().fixed.find { it.@facet == 'jst.java' }.@facet = 'jst2.java'
}
eclipse
Дякую за увагу
Запитання ??

More Related Content

Viewers also liked

03 - chomu prohramisty ne testuiut - yurii chulovskyi - it event 2013 (5)
03 -  chomu prohramisty ne testuiut - yurii chulovskyi - it event 2013 (5)03 -  chomu prohramisty ne testuiut - yurii chulovskyi - it event 2013 (5)
03 - chomu prohramisty ne testuiut - yurii chulovskyi - it event 2013 (5)Igor Bronovskyy
 
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)Igor Bronovskyy
 
Протокол IP v.6: кожному по 300 млн. IP адрес - Сергій Шуляр
Протокол  IP v.6: кожному по 300 млн. IP адрес - Сергій ШулярПротокол  IP v.6: кожному по 300 млн. IP адрес - Сергій Шуляр
Протокол IP v.6: кожному по 300 млн. IP адрес - Сергій ШулярIgor Bronovskyy
 
11 - rozrobka prohramnoho zabezpechennia dlia vbudovanykh system - dmytro and...
11 - rozrobka prohramnoho zabezpechennia dlia vbudovanykh system - dmytro and...11 - rozrobka prohramnoho zabezpechennia dlia vbudovanykh system - dmytro and...
11 - rozrobka prohramnoho zabezpechennia dlia vbudovanykh system - dmytro and...Igor Bronovskyy
 
01 an environment for application development tools that help you keep it t...
01   an environment for application development tools that help you keep it t...01   an environment for application development tools that help you keep it t...
01 an environment for application development tools that help you keep it t...Igor Bronovskyy
 
Joomla 3. Що нового для розробників у новій версії - Віталій Маренков
Joomla 3. Що нового для розробників у новій версії - Віталій МаренковJoomla 3. Що нового для розробників у новій версії - Віталій Маренков
Joomla 3. Що нового для розробників у новій версії - Віталій МаренковIgor Bronovskyy
 
07 - vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
07 -  vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...07 -  vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
07 - vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...Igor Bronovskyy
 
15 - sphinx - efektyvnyi povnotekstovyi poshuk - marian koreniuk - it event 2...
15 - sphinx - efektyvnyi povnotekstovyi poshuk - marian koreniuk - it event 2...15 - sphinx - efektyvnyi povnotekstovyi poshuk - marian koreniuk - it event 2...
15 - sphinx - efektyvnyi povnotekstovyi poshuk - marian koreniuk - it event 2...Igor Bronovskyy
 

Viewers also liked (8)

03 - chomu prohramisty ne testuiut - yurii chulovskyi - it event 2013 (5)
03 -  chomu prohramisty ne testuiut - yurii chulovskyi - it event 2013 (5)03 -  chomu prohramisty ne testuiut - yurii chulovskyi - it event 2013 (5)
03 - chomu prohramisty ne testuiut - yurii chulovskyi - it event 2013 (5)
 
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
 
Протокол IP v.6: кожному по 300 млн. IP адрес - Сергій Шуляр
Протокол  IP v.6: кожному по 300 млн. IP адрес - Сергій ШулярПротокол  IP v.6: кожному по 300 млн. IP адрес - Сергій Шуляр
Протокол IP v.6: кожному по 300 млн. IP адрес - Сергій Шуляр
 
11 - rozrobka prohramnoho zabezpechennia dlia vbudovanykh system - dmytro and...
11 - rozrobka prohramnoho zabezpechennia dlia vbudovanykh system - dmytro and...11 - rozrobka prohramnoho zabezpechennia dlia vbudovanykh system - dmytro and...
11 - rozrobka prohramnoho zabezpechennia dlia vbudovanykh system - dmytro and...
 
01 an environment for application development tools that help you keep it t...
01   an environment for application development tools that help you keep it t...01   an environment for application development tools that help you keep it t...
01 an environment for application development tools that help you keep it t...
 
Joomla 3. Що нового для розробників у новій версії - Віталій Маренков
Joomla 3. Що нового для розробників у новій версії - Віталій МаренковJoomla 3. Що нового для розробників у новій версії - Віталій Маренков
Joomla 3. Що нового для розробників у новій версії - Віталій Маренков
 
07 - vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
07 -  vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...07 -  vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
07 - vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
 
15 - sphinx - efektyvnyi povnotekstovyi poshuk - marian koreniuk - it event 2...
15 - sphinx - efektyvnyi povnotekstovyi poshuk - marian koreniuk - it event 2...15 - sphinx - efektyvnyi povnotekstovyi poshuk - marian koreniuk - it event 2...
15 - sphinx - efektyvnyi povnotekstovyi poshuk - marian koreniuk - it event 2...
 

Similar to 12 - gradle. evoliutsiia system avtomatychnoi zbirky - sviatoslav babych - it event 2013 (5)

QA Fest 2016. Яна Кокряшкіна. Паралельний запуск автоматизованих тестів за до...
QA Fest 2016. Яна Кокряшкіна. Паралельний запуск автоматизованих тестів за до...QA Fest 2016. Яна Кокряшкіна. Паралельний запуск автоматизованих тестів за до...
QA Fest 2016. Яна Кокряшкіна. Паралельний запуск автоматизованих тестів за до...QAFest
 
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)Exoft LLC
 
Php unit. Y. Muzychushun
Php unit. Y. MuzychushunPhp unit. Y. Muzychushun
Php unit. Y. MuzychushunHRdepartment
 
Тестування при розробці програмного забезпечення. Unit Tests.
Тестування при розробці програмного забезпечення. Unit Tests.Тестування при розробці програмного забезпечення. Unit Tests.
Тестування при розробці програмного забезпечення. Unit Tests.Elantix
 
Global logic tech talk switching to Angular.js
Global logic tech talk switching to Angular.jsGlobal logic tech talk switching to Angular.js
Global logic tech talk switching to Angular.jsPavlo Iuriichuk
 
Павло Юрійчук — Перехід на Angular.js. Howto
Павло Юрійчук — Перехід на Angular.js. HowtoПавло Юрійчук — Перехід на Angular.js. Howto
Павло Юрійчук — Перехід на Angular.js. HowtoGlobalLogic Ukraine
 
Lecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-CLecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-CMaksym Davydov
 
горбань а. г. програмування в Java (2008)
горбань а. г. програмування в Java (2008)горбань а. г. програмування в Java (2008)
горбань а. г. програмування в Java (2008)vlad hats
 
"Rethinking Continuous Delivery", Andrii Nasinnyk
"Rethinking Continuous Delivery",  Andrii Nasinnyk"Rethinking Continuous Delivery",  Andrii Nasinnyk
"Rethinking Continuous Delivery", Andrii NasinnykFwdays
 
лаб. роб. №2 обєкти та сервіси що ними надаються
лаб. роб. №2   обєкти та сервіси що ними надаютьсялаб. роб. №2   обєкти та сервіси що ними надаються
лаб. роб. №2 обєкти та сервіси що ними надаютьсяcit-cit
 
Phpunit модульне тестування
Phpunit модульне тестуванняPhpunit модульне тестування
Phpunit модульне тестуванняVladimir Maslechkin
 
'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...
'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...
'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...OdessaJS Conf
 
10 asp.net
10 asp.net 10 asp.net
10 asp.net eleksdev
 

Similar to 12 - gradle. evoliutsiia system avtomatychnoi zbirky - sviatoslav babych - it event 2013 (5) (20)

QA Fest 2016. Яна Кокряшкіна. Паралельний запуск автоматизованих тестів за до...
QA Fest 2016. Яна Кокряшкіна. Паралельний запуск автоматизованих тестів за до...QA Fest 2016. Яна Кокряшкіна. Паралельний запуск автоматизованих тестів за до...
QA Fest 2016. Яна Кокряшкіна. Паралельний запуск автоматизованих тестів за до...
 
ASP.Net MVC
ASP.Net MVCASP.Net MVC
ASP.Net MVC
 
ASP.Net basics
ASP.Net basics ASP.Net basics
ASP.Net basics
 
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
 
NodeJS.pptx
NodeJS.pptxNodeJS.pptx
NodeJS.pptx
 
Php unit. Y. Muzychushun
Php unit. Y. MuzychushunPhp unit. Y. Muzychushun
Php unit. Y. Muzychushun
 
Тестування при розробці програмного забезпечення. Unit Tests.
Тестування при розробці програмного забезпечення. Unit Tests.Тестування при розробці програмного забезпечення. Unit Tests.
Тестування при розробці програмного забезпечення. Unit Tests.
 
Global logic tech talk switching to Angular.js
Global logic tech talk switching to Angular.jsGlobal logic tech talk switching to Angular.js
Global logic tech talk switching to Angular.js
 
Павло Юрійчук — Перехід на Angular.js. Howto
Павло Юрійчук — Перехід на Angular.js. HowtoПавло Юрійчук — Перехід на Angular.js. Howto
Павло Юрійчук — Перехід на Angular.js. Howto
 
Design patterns part 1
Design patterns part 1Design patterns part 1
Design patterns part 1
 
Lecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-CLecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-C
 
cpp-2013 #20 Best practices
cpp-2013 #20 Best practicescpp-2013 #20 Best practices
cpp-2013 #20 Best practices
 
горбань а. г. програмування в Java (2008)
горбань а. г. програмування в Java (2008)горбань а. г. програмування в Java (2008)
горбань а. г. програмування в Java (2008)
 
Design patterns part 2
Design patterns part 2Design patterns part 2
Design patterns part 2
 
"Rethinking Continuous Delivery", Andrii Nasinnyk
"Rethinking Continuous Delivery",  Andrii Nasinnyk"Rethinking Continuous Delivery",  Andrii Nasinnyk
"Rethinking Continuous Delivery", Andrii Nasinnyk
 
лаб. роб. №2 обєкти та сервіси що ними надаються
лаб. роб. №2   обєкти та сервіси що ними надаютьсялаб. роб. №2   обєкти та сервіси що ними надаються
лаб. роб. №2 обєкти та сервіси що ними надаються
 
Phpunit модульне тестування
Phpunit модульне тестуванняPhpunit модульне тестування
Phpunit модульне тестування
 
'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...
'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...
'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...
 
10 asp.net
10 asp.net 10 asp.net
10 asp.net
 
JavaScript. Lectures. part 1. basis
JavaScript. Lectures. part 1. basisJavaScript. Lectures. part 1. basis
JavaScript. Lectures. part 1. basis
 

Recently uploaded

Відкрита лекція на тему «Біологічний захист рослин у теплицях»
Відкрита лекція на тему «Біологічний захист рослин у теплицях»Відкрита лекція на тему «Біологічний захист рослин у теплицях»
Відкрита лекція на тему «Біологічний захист рослин у теплицях»tetiana1958
 
Роберт Шеклі. Біографія письменника-фантаста
Роберт Шеклі. Біографія письменника-фантастаРоберт Шеклі. Біографія письменника-фантаста
Роберт Шеклі. Біографія письменника-фантастаAdriana Himinets
 
Критерії самоцінювання Іноземні мови.pdf
Критерії самоцінювання  Іноземні мови.pdfКритерії самоцінювання  Іноземні мови.pdf
Критерії самоцінювання Іноземні мови.pdfolha1koval
 
Kryterii otciniuvannia navchalnykh dosiahnen
Kryterii otciniuvannia navchalnykh dosiahnenKryterii otciniuvannia navchalnykh dosiahnen
Kryterii otciniuvannia navchalnykh dosiahnenolha1koval
 
освітня програма 2023-2024 .
освітня програма  2023-2024                    .освітня програма  2023-2024                    .
освітня програма 2023-2024 .zaskalko111
 
Презентація роботи Осипенківської ЗОШ 2023-2024.pptx
Презентація роботи Осипенківської ЗОШ 2023-2024.pptxПрезентація роботи Осипенківської ЗОШ 2023-2024.pptx
Презентація роботи Осипенківської ЗОШ 2023-2024.pptxssuserc6cee7
 
Автомат.звука с.інтегровані ігри для дітейpptx
Автомат.звука с.інтегровані ігри для дітейpptxАвтомат.звука с.інтегровані ігри для дітейpptx
Автомат.звука с.інтегровані ігри для дітейpptxvitalina6709
 
критерії сооцінювання і взаємооцінюваннятехнології.pdf
критерії сооцінювання і взаємооцінюваннятехнології.pdfкритерії сооцінювання і взаємооцінюваннятехнології.pdf
критерії сооцінювання і взаємооцінюваннятехнології.pdfolha1koval
 
Черкаський художньо-технічний коледж оголошує про день відкритих дверей
Черкаський художньо-технічний коледж оголошує про день відкритих дверейЧеркаський художньо-технічний коледж оголошує про день відкритих дверей
Черкаський художньо-технічний коледж оголошує про день відкритих дверейvitaliyinformatik
 
ПОРТУГАЛІЯ ТА ІСПАНІЯ В ПЕРШІЙ ТРЕТИНІ хх СТ.pptx
ПОРТУГАЛІЯ ТА ІСПАНІЯ В ПЕРШІЙ ТРЕТИНІ хх СТ.pptxПОРТУГАЛІЯ ТА ІСПАНІЯ В ПЕРШІЙ ТРЕТИНІ хх СТ.pptx
ПОРТУГАЛІЯ ТА ІСПАНІЯ В ПЕРШІЙ ТРЕТИНІ хх СТ.pptxAlexanderSholk
 
Луцький центр ПТО соціальний проєкт .pptx
Луцький центр ПТО соціальний проєкт .pptxЛуцький центр ПТО соціальний проєкт .pptx
Луцький центр ПТО соціальний проєкт .pptxhome
 

Recently uploaded (15)

Відкрита лекція на тему «Біологічний захист рослин у теплицях»
Відкрита лекція на тему «Біологічний захист рослин у теплицях»Відкрита лекція на тему «Біологічний захист рослин у теплицях»
Відкрита лекція на тему «Біологічний захист рослин у теплицях»
 
Роберт Шеклі. Біографія письменника-фантаста
Роберт Шеклі. Біографія письменника-фантастаРоберт Шеклі. Біографія письменника-фантаста
Роберт Шеклі. Біографія письменника-фантаста
 
Критерії самоцінювання Іноземні мови.pdf
Критерії самоцінювання  Іноземні мови.pdfКритерії самоцінювання  Іноземні мови.pdf
Критерії самоцінювання Іноземні мови.pdf
 
17.04.2024.2.docx17.04.2024.2.docx17.04.2024.2.docx
17.04.2024.2.docx17.04.2024.2.docx17.04.2024.2.docx17.04.2024.2.docx17.04.2024.2.docx17.04.2024.2.docx
17.04.2024.2.docx17.04.2024.2.docx17.04.2024.2.docx
 
17.04.2024.1.docx17.04.2024.1.docx17.04.2024.1.docx
17.04.2024.1.docx17.04.2024.1.docx17.04.2024.1.docx17.04.2024.1.docx17.04.2024.1.docx17.04.2024.1.docx
17.04.2024.1.docx17.04.2024.1.docx17.04.2024.1.docx
 
Kryterii otciniuvannia navchalnykh dosiahnen
Kryterii otciniuvannia navchalnykh dosiahnenKryterii otciniuvannia navchalnykh dosiahnen
Kryterii otciniuvannia navchalnykh dosiahnen
 
освітня програма 2023-2024 .
освітня програма  2023-2024                    .освітня програма  2023-2024                    .
освітня програма 2023-2024 .
 
Її величність - українська книга презентація-огляд 2024.pptx
Її величність - українська книга презентація-огляд 2024.pptxЇї величність - українська книга презентація-огляд 2024.pptx
Її величність - українська книга презентація-огляд 2024.pptx
 
Презентація роботи Осипенківської ЗОШ 2023-2024.pptx
Презентація роботи Осипенківської ЗОШ 2023-2024.pptxПрезентація роботи Осипенківської ЗОШ 2023-2024.pptx
Презентація роботи Осипенківської ЗОШ 2023-2024.pptx
 
Віртуальна виставка «Аграрна наука України у виданнях: історичний аспект»
Віртуальна виставка «Аграрна наука України у виданнях: історичний аспект»Віртуальна виставка «Аграрна наука України у виданнях: історичний аспект»
Віртуальна виставка «Аграрна наука України у виданнях: історичний аспект»
 
Автомат.звука с.інтегровані ігри для дітейpptx
Автомат.звука с.інтегровані ігри для дітейpptxАвтомат.звука с.інтегровані ігри для дітейpptx
Автомат.звука с.інтегровані ігри для дітейpptx
 
критерії сооцінювання і взаємооцінюваннятехнології.pdf
критерії сооцінювання і взаємооцінюваннятехнології.pdfкритерії сооцінювання і взаємооцінюваннятехнології.pdf
критерії сооцінювання і взаємооцінюваннятехнології.pdf
 
Черкаський художньо-технічний коледж оголошує про день відкритих дверей
Черкаський художньо-технічний коледж оголошує про день відкритих дверейЧеркаський художньо-технічний коледж оголошує про день відкритих дверей
Черкаський художньо-технічний коледж оголошує про день відкритих дверей
 
ПОРТУГАЛІЯ ТА ІСПАНІЯ В ПЕРШІЙ ТРЕТИНІ хх СТ.pptx
ПОРТУГАЛІЯ ТА ІСПАНІЯ В ПЕРШІЙ ТРЕТИНІ хх СТ.pptxПОРТУГАЛІЯ ТА ІСПАНІЯ В ПЕРШІЙ ТРЕТИНІ хх СТ.pptx
ПОРТУГАЛІЯ ТА ІСПАНІЯ В ПЕРШІЙ ТРЕТИНІ хх СТ.pptx
 
Луцький центр ПТО соціальний проєкт .pptx
Луцький центр ПТО соціальний проєкт .pptxЛуцький центр ПТО соціальний проєкт .pptx
Луцький центр ПТО соціальний проєкт .pptx
 

12 - gradle. evoliutsiia system avtomatychnoi zbirky - sviatoslav babych - it event 2013 (5)

  • 1. Еволюція систем автоматичної збірки. Порівняння із Ant’ом та Maven’ом
  • 2. Зміст 1. Що таке Gradle ? Основні можливості . 2. Основи скриптової мови (Groovy) 3. Управління залежностями та зв’язками 4. Збираємо багато проектів одночасно 5. Плагіни 1. Java 2. War, Ear 3. Eclipse, Eclipse-wtp 6. Робота із система безперервної інтеграції (continuous integration – Jenkins, Hudson)
  • 3. Що таке Gradle ? Основні можливості. • Гнучкий інструмент для автоматичної збірки (build tool) назразок Ant’у • Поставляється разом із build description language (DSL) на основі Groovy • Як і Maven побудований на принципі - build-by-convention • Дуже гнучкий та легко розширюваний. • Містить вбудовані плагіни для Java, Eclipse, Scala, Groovi, Web, OSGi • Потужна підтримка для збірки багатьох проектів одночасно (multi-project builds) • Керування залежностями (dependency management) побудована на основі Apache Ivy
  • 4. • Повністю інтегрований із Ant, Maven та Ivy. Підтримує їх структуру репозиторіїв. • Безкоштовний та з відкритим кодом • Паралельне виконання юніт тестів • Підтримка послідовних збірок (incremental builds) • Динамічні таски та правила для тасків
  • 5. + гнучкість + залежність тасків + контроль над процесом + різні таски на кожну задачу - важкі build.xml - тяжко підтримувати + керування залежностями + плагіни + збірка багатьох модулів проекту + угода по конфігурації (convention over configuration) - важкі pom.xml - тяжко перевизначити поведінку по замовчуванні + DSL , замість XML легкість кастомізації
  • 6. Основи скриптової мови (Groovy) task hello << { println 'Hello world!' } D:@gradlehello.world>gradle hello :hello Hello world! BUILD SUCCESSFUL Дві основні концепції: проекти та таски. Gradle task == Ant target task intro(dependsOn: hello) << { println "I'm Gradle" } 1. Hello World 2. Залежності між тасками D:@gradlehello.world>gradle intro :intro Hello world! I'm Gradle BUILD SUCCESSFUL
  • 7. 4.times { counter -> task "task$counter" << { println "I'm task number $counter" } } D:@gradlehello.world>gradle task1 :task1 I'm task number 1 BUILD SUCCESSFUL task0.dependsOn task2, task3 3. Динамічні таски 4. Маніпулювання тасками D:@gradlehello.world>gradle task0 :task0 I'm task number 2 I'm task number 3 I'm task number 0 BUILD SUCCESSFUL task0.doFirst { println ‘before task hook' } task0.doLast { println ‘after task hook' } D:@gradlehello.world>gradle task0 :task0 before task hook I'm task number 0 after task hook BUILD SUCCESSFUL taskGraph
  • 8. Управління залежностями та зв’язками apply plugin: 'java' repositories { mavenCentral() } dependencies { compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final' testCompile group: 'junit', name: 'junit', version: '4.+' } compile Залежності необхідні на етапі компіляції проекту з сорсів runtime Залежності необхідні для зкомпільованих класів в рантаймі. Також включають в себе compile залежності testCompile Залежності необхідні для компіляції тест сорсів. Також включають в себе compile залежності та зкомпільовані класи testRuntime Залежності необхідні для запуску тестів. Включає compile, compiled classes, testCompile
  • 9. Репозиторії: • основний Maven, • віддалені Maven / Ivy, • локальні Maven / Ivy repositories { ivy { url "../local-repo" } maven { url "http://repo.company.com/maven2" } }
  • 10. Збираємо багато проектів одночасно • Необхідно створити settings.gradle файл у якому вказати які проекти включати. • Можна задати дефолтні налаштування для всіх підпроектів за допомогою subprojects {} • Можна задати залежності між проектами. Таким чином можна регулювати порядок білдання підпроектів. include "shared", "api", "services:webservice", "services:shared" dependencies { compile project(':shared') } subprojects { apply plugin: 'java‘ apply plugin: 'eclipse-wtp' repositories { mavenCentral() } dependencies { testCompile 'junit:junit:4.11' } }
  • 11. Плагіни • Додають таски до проекту • Налаштовують додані таски значеннями по-замовчуванню • Додають налаштування залежностей • Додають нові властивості та методи до існуючого типу через розширення java announce war checkstyle project-report groovy application java-library-distribution codenarc signing scala build-announcements ivy-publish eclipse sonar antlr ear maven-publish eclipse-wtp cpp jetty maven2Gradle findbugs cpp-exe maven build-dashboard idea cpp-liv osgi pmd jdepend
  • 12. Java Плагін compileJava processResources clean classes javadoc compileTestJava processTestResources jar testClasses test uploadArchives check assemble build
  • 13. <project name="simple" default="dist" basedir="."> <property name="src" location="src/main/java" /> <property name="srcTest" location="src/test/java" /> <property name="build" location="build" /> <property name="dist" location="${build}/lib" /> <path id="classpath.test"> <pathelement location="libs/junit-4.8.1.jar" /> <pathelement location="${srcTest}" /> <pathelement location="${build}/classes" /> <pathelement location="${build}/test-classes" /> </path> <target name="init"> <mkdir dir="${build}/classes" /> <mkdir dir="${build}/test-classes" /> </target> <target name="compile" depends="init"> <javac srcdir="${src}" destdir="${build}/classes" /> </target> <target name="testCompile" depends="init"> <javac srcdir="${srcTest}" destdir="${build}/test-classes"> <classpath refid="classpath.test" /> </javac> </target> <target name="test" depends="testCompile"> <junit fork="yes" haltonfailure="yes"> <batchtest fork="yes"> <fileset dir="${srcTest}"> <include name="**/*Test.java" /> <include name="**/Test*.java" /> </fileset> </batchtest> <classpath refid="classpath.test" /> <formatter type="plain"/> </junit> </target> <target name="dist" depends="compile"> <mkdir dir="${dist}" /> <jar jarfile="${dist}/simple.jar" basedir="${build}/classes" /> </target> <target name="clean"> <delete dir="${build}" /> </target> </project> <?xml version="1.0" encoding="UTF-8"?> <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 http://maven.apache.org/maven-v4_0_0.xsd" > <modelVersion>4.0.0</modelVersion> <groupId>pl.gradle</groupId> <artifactId>simple</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.1</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> </plugins> </build> </project> apply plugin: 'java' version = '1.0-SNAPSHOT' repositories { mavenCentral() } dependencies { testCompile 'junit:junit:4.8.1' } javaProject
  • 14. War, Ear classes assemblewar. ear Структура проекту: apply plugin: 'java' version = '1.0' jar { manifest { attributes 'Implementation-Title': 'Java Project', 'Implementation-Version': version } } repositories { mavenCentral() } dependencies { compile group: 'commons-collections', name: 'commons-collections', version: '3.2' testCompile group: 'junit', name: 'junit', version: '4.+' } test { systemProperties 'property': 'value' } uploadArchives { repositories { flatDir { dirs 'repos' } } } earWithWar
  • 15. Eclipse, Eclipse-wtp eclipseProject генерує .project файл eclipseClasspath генерує .classpathфайл eclipseJdt генерує .settings/org.eclipse.jdt.core.prefs файл eclipseWtpComponent генерує .settings/org.eclipse.wst.common.component файл eclipseWtpFacet генерує .settings/org.eclipse.wst.common.project.facet.core.xml файл eclipse генерує всі конфігураційні файл clean, clean… видаляє відповідні файли
  • 16. Кожен із згенерованих файлів можна модифікувати за допомогою хуків. Процес генерації файлів виглядає наступним чином: 1. Читається відповідний файл, або якщо такого файлу не існує то використовується дефолтовий передбачений Gradle’ом. 2. Виконується beforeMerged хук із об’єктом, який представляє відповідний файл. 3. Поточний контент файлу об’єднується із налаштуваннями з білд скрипту або дефолтовими з Gradle’ у 4. Виконується whenMerged хук із об’єктом, який представляє вміст результуючого файлу 5. Виконується withXml хук із XML представленням результуючого файлу 6. Створюється фінальний XML файл
  • 17. apply plugin: 'war' apply plugin: 'eclipse' repositories { mavenCentral() } dependencies { compile group: 'commons-collections', name: 'commons-collections', version: '3.2' testCompile group: 'junit', name: 'junit', version: '4.+' } eclipse.classpath.file { beforeMerged { classpath -> classpath.entries.removeAll { entry -> entry.kind == 'lib' || entry.kind == 'var' } } whenMerged { classpath -> classpath.entries.findAll { entry -> entry.kind == 'lib' }*.exported = false } } apply plugin: 'eclipse-wtp' eclipse.wtp.facet.file.withXml { provider -> provider.asNode().fixed.find { it.@facet == 'jst.java' }.@facet = 'jst2.java' } eclipse