Vra

Wat kry 'n ander bou-instrument wat op Java gerig is my regtig?

As jy Gradle oor 'n ander instrument gebruik, hoekom?

Was dit nuttig?

Oplossing

Ek gebruik nie Gradle in woede myself (net 'n speelding projek tot dusver) [ skrywer middel wat hulle gebruik het Gradle op net 'n speelding projek tot dusver, nie dat Gradle is 'n speelding projek - sien kommentaar] , maar ek sou sê dat die redes sou 'n mens kyk na die gebruik van dit sou wees as gevolg van die frustrasies van mier en Maven.

In my ervaring mier is net skryf dikwels (ja ek weet dit is moontlik om te skryf pragtig modulêre, elegante bou s, maar die feit is die meeste mense doen nie). Vir enige nie-triviale projekte word dit mind-buiging, en neem groot sorg om te verseker dat komplekse bou is werklik draagbaar. Sy noodsaaklik natuur kan lei tot vermeerdering van opset tussen bou (alhoewel makros hier kan help).

Maven neem die teenoorgestelde benadering en verwag dat jy heeltemal te integreer met die Maven lewensiklus. Ervaar Ant gebruikers vind hierdie besonder yster as Maven verwyder baie van die vryheid wat jy het in mier. Byvoorbeeld is daar 'n Sonatype blog dat opsomming baie van die Maven kritiek en hul antwoorde.

Die Maven plugin meganisme maak voorsiening vir baie kragtige bou konfigurasies, en die erfenis model beteken dat jy kan 'n klein stel van ouer Poms vat jou bou konfigurasies vir die onderneming in sy geheel en die individuele projekte kan diegene konfigurasies besit definieer, waarna hulle lig. Maven opset is baie verbose (alhoewel Maven 3 beloftes aan dit aan te spreek), en as jy wil iets wat "nie die Maven manier" jy 'n plugin te skryf of gebruik die mag nou wel Ant integrasie doen. Let wel ek toevallig soos die skryf van Maven plugins maar besef dat baie wil beswaar aanteken teen die poging betrokke is.

Gradle beloof om die lieflike plek tussen Ant en Maven getref. Dit maak gebruik van Ivy se benadering vir afhanklikheid resolusie. Dit maak voorsiening vir konvensie oor opset maar sluit ook Ant take as eerste klas burgers. Dit is ook verstandig kan jy bestaande Maven / Ivy repositories te gebruik.

As jy getref en vasgeval met enige van die mier / Maven pyn punte, dit is waarskynlik die moeite werd om te probeer Gradle uit, maar in my mening is dit moet nog gesien word as jy sou nie net die handel bekend probleme vir onbekende mense. Die bewys van die poeding is in die eet al so ek oordeel sal behou totdat die produk is 'n bietjie meer volwasse en ander uitgestryk enige Kinks (hulle noem dit bloeding rand vir 'n rede). Ek sal steeds gebruik word om dit in my speelgoed projekte al is, dit is altyd goed om bewus te wees van die opsies.

Ander wenke

Gradle kan gebruik word vir baie doeleindes - dit is 'n baie beter Switserse weermagmes as Ant -. Maar dit is spesifiek gefokus op multi-projek bou

In die eerste plek, Gradle is 'n afhanklikheid ontwikkeling instrument wat ook beteken dat dit 'n ontwikkeling instrument. Met Gradle jy kan enige ewekansige taak uit te voer in jou opstel en Gradle sal seker maak al verklaar dependecies behoorlik en tydig uitgevoer. Jou kode kan versprei oor baie dopgehou word in enige vorm van uitleg (boom, plat, verspreid, ...).

Gradle het twee duidelike fases: evaluering en uitvoering. Basies, tydens evaluering Gradle sal kyk en bou skrifte in die dopgehou dit veronderstel is om te kyk evalueer. Tydens uitvoering sal Gradle take wat tydens evaluering met inagneming taak inter-afhanklikhede gelaai voer.

Op die top van hierdie afhanklikheid programmering funksies Gradle voeg projek en JAR afhanklikheid funksies deur integrasie met Apache Ivy. Soos u weet Ivy is 'n baie sterker en baie minder uitgesproke afhanklikheid beheer instrument as sê Maven.

Gradle ontdek afhanklikhede tussen projekte en tussen projekte en pype. Gradle werke met Maven repositories (aflaai en oplaai) soos die iBiblio een of jou eie bronne, maar ook ondersteun en ander soort repository infrastruktuur wat jy mag hê.

In multi-projek bou Gradle is beide aanpasbaar en aanpas by struktuur en argitektuur die bou van. Jy hoef nie om jou struktuur of argitektuur aan te pas by jou bou hulpmiddel as nodig sou wees met Maven.

Gradle probeer baie hard nie in jou pad te kry, 'n poging Maven byna nooit maak. Konvensie is goed nog so is buigsaamheid. Gradle gee jou baie meer funksies as Maven nie, maar die belangrikste in baie gevalle Gradle sal jy 'n pynlose oorgang pad weg te bied vanaf Maven.

Dit kan 'n bietjie omstrede wees, maar Gradle nie versteek die feit dat dit 'n volwaardige programmeertaal.

Ant + mier-contrib is in wese 'n Turing volledige programmeertaal wat niemand regtig wil program in.

Maven probeer om die teenoorgestelde benadering om te probeer heeltemal verklarende te wees en dwing jou om te skryf en stel 'n plugin as jy logika nodig neem. Dit stel ook 'n projek model wat heeltemal onbuigbaar. Gradle kombineer die beste van al hierdie gereedskap:

  • Dit volg konvensie-over-opset (ala Maven) maar slegs in die mate wat jy dit wil
  • Dit kan jy skryf buigsame persoonlike take soos in mier
  • Dit bied 'n multi-module projek ondersteuning wat is beter as beide Ant en Maven
  • Dit het 'n DSL dat die 80% dinge maklik maak en die 20% dinge moontlik (in teenstelling met ander bou gereedskap wat die 80% maklik, 10% moontlik en 10% effektief onmoontlik maak).

Gradle is die mees konfigureerbare en buigsame bou hulpmiddel Ek het nog om te gebruik. Dit vereis 'n belegging aan die voorkant na die DSL en konsepte soos konfigurasies te leer, maar as jy 'n no-nonsense en heeltemal konfigureerbare JVM bou hulpmiddel nodig dit is moeilik om te klop.

Gradle mooi kombineer beide Ant en Maven, neem die beste van beide raamwerke. Buigsaamheid van Ant en konvensie oor opset, afhanklikheid bestuur en plugins van Maven.

As jy wil 'n standaard Java bou het, soos in Maven, maar toets taak het om 'n paar persoonlike stap dit kan lyk soos hieronder doen.

build.gradle:

apply plugin:'java'
task test{
  doFirst{
    ant.copy(toDir:'build/test-classes'){fileset dir:'src/test/extra-resources'}
  }
  doLast{
    ...
  }
}

Op die top van dat dit gebruik groovy sintaksis wat veel meer uitdrukking krag gee dan mier / Maven se xml.

Dit is 'n superstel van Ant - jy kan al Ant take gebruik in gradle met mooier, groovy-agtige sintaksis, met ander woorde

.
ant.copy(file:'a.txt', toDir:"xyz")

of

ant.with{
  delete "x.txt"
  mkdir "abc"
  copy file:"a.txt", toDir: "abc"
}

Ons gebruik Gradle en verkies dit bo Maven en Ant. Mier het ons totale buigsaamheid, en Ivy gee beter afhanklikheid bestuur as Maven, maar daar is nie 'n groot ondersteuning vir multi-projek bou. Beland jy besig met 'n baie van kodering te ondersteun multi-projek bou. Ook met 'n paar opbou deur-konvensie is mooi en maak bou skrifte meer bondige. Met Maven, dit neem bou deur konvensie te ver, en die opstel van jou bou proses word 'n hack. Ook, Maven bevorder elke projek te publiseer 'n juweel. Soms moet jy 'n projek verdeel in subprojekte maar jy wil al die subprojekte gebou moet word en saam weergawes. Nie regtig iets Maven is ontwerp vir.

Met Gradle jy kan die buigsaamheid van Ant en bou deur konvensie van Maven het. Byvoorbeeld, dit is triviale aan die konvensionele bou lewensiklus te brei met jou eie taak. En jy is nie verplig om 'n konvensie gebruik as jy nie wil nie. Groovy is baie lekkerder om kode as XML. In Gradle, kan jy afhanklikhede tussen projekte op die plaaslike lêerstelsel te definieer sonder die behoefte om artefakte te publiseer vir elke 'n repository. Ten slotte, Gradle gebruik Ivy, so dit het 'n uitstekende afhanklikheid bestuur. Die enigste werklike nadeel vir my tot dusver is die gebrek aan volwasse Eclipse integrasie, maar die opsies vir Maven is nie regtig baie beter.

Dit is nie my antwoord, maar dit resoneer beslis met my. Dit is van ThoughtWorks 'Tegnologie Radar van Oktober 2012 :

  

Twee dinge het veroorsaak moegheid met XML-gebaseerde bou gereedskap soos Ant en   Maven: te veel kwaad pointy draadjies en die grofheid van plug-in   argitekture. Terwyl sintaksis kwessies hanteer kan word deur   geslag, plug-in argitektuur erg die vermoë om te bou beperk   gereedskap om grasieus te groei as projekte meer kompleks raak. Ons het gekom   om te voel dat inproppe is die verkeerde vlak van abstraksie, en verkies   -Taal-gebaseerde gereedskap soos Gradle en hark in plaas, omdat hulle bied   fyner korrelige abstraksies en meer buigsaamheid langtermyn.

Gradle het die pret teruggesit in die bou/samestelling van sagteware.Ek het my hele loopbaan mier gebruik om sagteware te bou en ek het nog altyd die werklike "buildit"-deel van die ontwikkelingswerk as 'n noodsaaklike euwel beskou.'n Paar maande terug het ons maatskappy moeg geraak daarvoor om nie 'n binêre repo te gebruik nie (ook bekend as die inboek van potte in die vcs) en ek het die taak gekry om dit te ondersoek.Het begin met klimop aangesien dit bo-op mier vasgebout kon word, het nie veel geluk gehad om my geboude artefakte gepubliseer te kry soos ek wou nie.Ek het vir maven gegaan en weggekap met xml, het uitstekend gewerk vir 'n paar eenvoudige helper-libs, maar ek het ernstige probleme ondervind om toepassings te bundel wat gereed is vir ontplooiing.Het 'n hele rukkie gesukkel om inproppe te google en forums te lees en het uiteindelik triljoene ondersteuningsbottels afgelaai vir verskeie inproppe wat ek moeilik gehad het om te gebruik.Uiteindelik het ek vir gradle gegaan (het op hierdie stadium nogal bitter geword, en vererg dat "Dit behoort nie SO moeilik te wees nie!")

Maar van dag een af ​​het my bui begin verbeter.Ek het iewers gekom.Het my so twee uur geneem om my eerste miermodule te migreer en die boulêer was basies niks.Maklik aangebring een skerm.Die groot "wow" was:bou skrifte in xml, hoe dom is dit?die feit dat die verklaring van een afhanklikheid EEN ry neem, is baie aantreklik vir my -> jy kan maklik alle afhanklikhede vir 'n sekere projek op een bladsy sien.Van toe af was ek op 'n konstante rol, vir elke probleem wat ek tot dusver in die gesig gestaar het, is daar 'n eenvoudige en elegante oplossing.Ek dink dit is die redes:

  • groovy is baie intuïtief vir Java-ontwikkelaars
  • dokumentasie is wonderlik tot wonderlik
  • die buigsaamheid is eindeloos

Nou spandeer ek my dae daaraan om nuwe kenmerke uit te dink om by ons bouproses te voeg.Hoe siek is dit?

Dit is ook baie makliker om inheemse bouwerk te bestuur.Ant en Maven is effektief slegs Java.Sommige inproppe bestaan ​​vir Maven wat probeer om 'n paar inheemse projekte te hanteer, maar hulle doen nie 'n effektiewe werk nie.Miertake kan geskryf word wat inheemse projekte saamstel, maar dit is te kompleks en ongemaklik.

Ons doen Java met JNI en baie ander inheemse stukkies.Gradle het ons Mier gemors aansienlik vereenvoudig.Toe ons begin om afhanklikheidsbestuur aan die inheemse projekte bekend te stel, was dit morsig.Ons het Maven gekry om dit te doen, maar die ekwivalente Gradle-kode was 'n klein fraksie van wat in Maven nodig was, en mense kon dit lees en verstaan ​​sonder om Maven-ghoeroes te word.

Ek stem gedeeltelik saam met Ed Staub. Gradle beslis is meer kragtig in vergelyking met Maven en bied meer buigsaamheid langtermyn.

Na die uitvoering van 'n evaluering te skuif van Maven om gradle, het ons besluit om te hou by homself Maven vir twee kwessies ons teëgekom met gradle (spoed is stadiger as Maven, volmag nie werk).

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top