• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
ITEvent Gradle. Еволюція систем автоматичної збірки. Порівняння із Ant та Maven'ом
 

ITEvent Gradle. Еволюція систем автоматичної збірки. Порівняння із Ant та Maven'ом

on

  • 270 views

Gradle - нова система збірки та інтеграційний засіб нового покоління. У доповіді ми ознайомимося з можливостями ...

Gradle - нова система збірки та інтеграційний засіб нового покоління. У доповіді ми ознайомимося з можливостями цього інструменту, порівняємо його з Ant та Maven, а також розглянемо випадки, у яких мінімальними зусиллями можна перетворити складний і незрозумілий процес складання великого проекту - на просту і прозору процедуру.

Святослав Бабич

Statistics

Views

Total Views
270
Views on SlideShare
268
Embed Views
2

Actions

Likes
0
Downloads
1
Comments
0

1 Embed 2

http://itevent.if.ua 2

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    ITEvent Gradle. Еволюція систем автоматичної збірки. Порівняння із Ant та Maven'ом ITEvent Gradle. Еволюція систем автоматичної збірки. Порівняння із Ant та Maven'ом Presentation Transcript

    • Еволюція систем автоматичноїзбірки. Порівняння із Ant’ом таMaven’ом
    • Зміст1.Що таке Gradle ? Основні можливості .2.Основи скриптової мови (Groovy)3.Управління залежностями та зв’язками4.Збираємо багато проектів одночасно5.Плагіни1.Java2.War, Ear3.Eclipse, Eclipse-wtp6.Робота із система безперервної інтеграції(continuous integration – Jenkins,Hudson)
    • Що таке Gradle ? Основніможливості.• Гнучкий інструмент для автоматичної збірки(build tool) назразок Ant’у• Поставляється разом із build descriptionlanguage (DSL) на основі Groovy• Як і Maven побудований на принципі - build-by-convention• Дуже гнучкий та легко розширюваний.• Містить вбудовані плагіни для Java, Eclipse,Scala, Groovi, Web, OSGi• Потужна підтримка для збірки багатьох проектіводночасно (multi-project builds)• Керування залежностями (dependencymanagement) побудована на основі ApacheIvy
    • • Повністю інтегрований із Ant, Maven та Ivy.Підтримує їх структуру репозиторіїв.• Безкоштовний та з відкритим кодом• Паралельне виконання юніт тестів• Підтримка послідовних збірок (incrementalbuilds)• Динамічні таски та правила для тасків
    • + гнучкість+ залежність тасків+ контроль надпроцесом+ різні таски на кожнузадачу- важкіbuild.xml- тяжкопідтримувати+ керуваннязалежностями+ плагіни+ збірка багатьох модулівпроекту+ угода по конфігурації(convention overconfiguration)- важкі pom.xml- тяжкоперевизначитиповедінку по+ DSL , замістьXML легкістькастомізації
    • Основи скриптової мови(Groovy)task hello << {println Hello world!}D:@gradlehello.world>gradle hello:helloHello world!BUILD SUCCESSFULДві основні концепції: проекти та таски.Gradle task == Ant targettask intro(dependsOn: hello) << {println "Im Gradle"}1. Hello World2. Залежності між таскамиD:@gradlehello.world>gradle intro:introHello world!Im GradleBUILD SUCCESSFUL
    • 4.times { counter ->task "task$counter" << {println "Im task number $counter"}}D:@gradlehello.world>gradle task1:task1Im task number 1BUILD SUCCESSFULtask0.dependsOn task2, task33. Динамічні таски4. Маніпулювання таскамиD:@gradlehello.world>gradle task0:task0Im task number 2Im task number 3Im task number 0BUILD SUCCESSFULtask0.doFirst {println ‘before task hook}task0.doLast {println ‘after task hook}D:@gradlehello.world>gradle task0:task0before task hookIm task number 0after task hookBUILD SUCCESSFULtaskGraph
    • Управління залежностями тазв’язкамиapply plugin: javarepositories {mavenCentral()}dependencies {compile group: org.hibernate, name: hibernate-core, version: 3.6.7.FinaltestCompile group: junit, name: junit, version: 4.+}compile Залежності необхідні на етапі компіляції проекту з сорсівruntime Залежності необхідні для зкомпільованих класів врантаймі. Також включають в себе compile залежностіtestCompileЗалежності необхідні для компіляції тест сорсів. Такожвключають в себе compile залежності та зкомпільованікласиtestRuntimeЗалежності необхідні для запуску тестів. Включаєcompile, compiled classes, testCompile
    • Репозиторії:• основний Maven,• віддалені Maven / Ivy,• локальні Maven / Ivyrepositories {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-wtprepositories {mavenCentral()}dependencies {testCompile junit:junit:4.11}}
    • Плагіни• Додають таски до проекту• Налаштовують додані таски значеннями по-замовчуванню• Додають налаштування залежностей• Додають нові властивості та методи до існуючоготипу через розширенняjava announce war checkstyleproject-reportgroovyapplication java-library-distributioncodenarcsigningscalabuild-announcementsivy-publish eclipse sonarantlr ear maven-publish eclipse-wtpcpp jetty maven2Gradl findbug
    • Java ПлагінcompileJavaprocessResourcescleanclasses javadoccompileTestJavaprocessTestResourcesjartestClassestestuploadArchivescheck assemblebuild
    • <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.0http://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: javaversion = 1.0-SNAPSHOTrepositories {mavenCentral()}dependencies {testCompile junit:junit:4.8.1}javaProject
    • War, Earclasses assemblewar. earСтруктура проекту:apply plugin: javaversion = 1.0jar {manifest {attributes Implementation-Title: Java Project, Implementation-Version:version}}repositories {mavenCentral()}dependencies {compile group: commons-collections, name: commons-collections, version:3.2testCompile group: junit, name: junit, version: 4.+}test {systemProperties property: value}uploadArchives {repositories {flatDir {dirs repos}}}earWithWar
    • Eclipse, Eclipse-wtpeclipseProjectгенерує .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: warapply plugin: eclipserepositories {mavenCentral()}dependencies {compile group: commons-collections, name: commons-collections, version: 3.2testCompile 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-wtpeclipse.wtp.facet.file.withXml { provider ->provider.asNode().fixed.find { it.@facet == jst.java }.@facet = jst2.java}eclipse
    • Дякую заувагуЗапитання ??