Dlaczego warto używać Gradle zamiast Ant lub Maven? [zamknięte]

Co tak naprawdę daje mi inne narzędzie build skierowane do Javy?

Jeśli używasz Gradle zamiast innego narzędzia, dlaczego?

Author: Matt, 2009-07-22

9 answers

Nie używam Gradle w gniewie siebie (tylko projekt zabawki do tej pory) [autor oznacza, że używali Gradle tylko na projekt zabawki do tej pory, nie, że Gradle jest projekt zabawki - patrz komentarze] , ale powiedziałbym, że powody, które można rozważyć użycie byłoby z powodu frustracji Ant i Maven.

Z mojego doświadczenia wynika, że Ant jest często tylko do pisania (tak Wiem, że można pisaćpięknie modularny, elegancki build s, ale faktem jest, że większość ludzi nie). Dla każdego nietrywialne projekty staje się umysłowy, i dba o to, aby złożone buildy były naprawdę przenośne. Jego imperatywny charakter może prowadzić do replikacji konfiguracji pomiędzy kompilacjami (choć makra mogą tu pomóc).

Maven przyjmuje odwrotne podejście i oczekuje całkowitej integracji z cyklem życia Mavena. Doświadczeni użytkownicy Ant uważają to za szczególnie denerwujące, ponieważ Maven usuwa wiele swobód, które masz w Ant. Na przykład istnieje Sonatype blog, który wymienia wiele krytycznych uwag Mavena i ich odpowiedzi.

Mechanizm wtyczek Mavena pozwala na bardzo wydajne konfiguracje kompilacji, a model dziedziczenia oznacza, że możesz zdefiniować mały zestaw nadrzędnych pomów hermetyzujących konfiguracje kompilacji dla całego przedsiębiorstwa, a poszczególne projekty mogą dziedziczyć te konfiguracje, pozostawiając je lekkimi. Konfiguracja Mavena jest bardzo słowna (choć Maven 3 obiecuje to rozwiązać), a jeśli chcesz zrobić coś, co jest " nie Maven way " musisz napisać wtyczkę lub skorzystać z integracji hacky Ant. Uwaga zdarza mi się pisać wtyczki Mavena, ale doceniam to, że wielu sprzeciwi się zaangażowaniu.

Gradle obiecuje trafić w słodki punkt między Ant i Maven. Wykorzystuje podejście Ivy do rozwiązywania zależności. Pozwala na konwencję ponad konfigurację, ale zawiera również zadania Ant jako obywatele pierwszej klasy. Pozwala również mądrze korzystać z istniejących repozytoriów Maven/Ivy.

Więc jeśli masz na wykresie dziennym widać, że na wykresie dziennym widać, że na wykresie dziennym widać, że na wykresie dziennym widać, że na wykresie dziennym widać, że na wykresie dziennym. Dowód na to, że budyń jest w jedzeniu, więc zastrzegłbym sobie osąd, dopóki produkt nie będzie trochę dojrzalszy, a inni wyprasują wszelkie załamania (nazywają to krwawą krawędzią nie bez powodu). Nadal będę go używać w moich projektach zabawek, zawsze dobrze jest mieć świadomość opcje.

 248
Author: Rich Seller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-08 17:05:46

Gradle może być używany do wielu celów - jest to znacznie lepszy szwajcarski nóż wojskowy niż Ant - ale jest specjalnie skoncentrowany na budowaniu wielu projektów.

Po pierwsze, Gradle jest narzędziem do programowania zależności, co oznacza również, że jest narzędziem programistycznym. Dzięki Gradle możesz wykonać dowolne losowe zadanie w swojej konfiguracji, a Gradle upewni się, że wszystkie zadeklarowane zależności są poprawnie i terminowo wykonane. Twój kod może być rozłożony na wiele katalogów w dowolnym układzie (drzewnym, płaskim, rozproszonym, ...).

Gradle ma dwie odrębne fazy: ocenę i realizację. Zasadniczo, podczas ewaluacji Gradle będzie szukał i oceniał Skrypty budowania w katalogach, w których ma wyglądać. Podczas wykonywania Gradle wykona zadania, które zostały załadowane podczas ewaluacji z uwzględnieniem zależności między zadaniami.

Oprócz tych funkcji programowania zależności Gradle dodaje funkcje zależności projektu i JAR poprzez integrację z Apache Ivy. Jak wiesz Ivy jest o wiele bardziej potężne i znacznie mniej opiniowane narzędzie do zarządzania zależnościami niż powiedzieć Maven.

Gradle wykrywa zależności między projektami oraz między projektami i słoikami. Gradle współpracuje z repozytoriami Maven (pobieranie i przesyłanie), takimi jak iBiblio one lub Twoje własne repozytoria, ale także obsługuje i inne rodzaje infrastruktury repozytoriów, które możesz mieć.

W kompilacjach wieloprojektowych Gradle jest zarówno adaptowalny, jak i dostosowuje się do struktury i architektury. Nie musisz dostosowywać swojego struktura lub Architektura twojego narzędzia do budowania, tak jak byłoby to wymagane w Maven.

Gradle bardzo się stara, aby nie wchodzić Ci w drogę, wysiłek, którego Maven prawie nigdy nie podejmuje. Konwencja jest dobra, ale tak samo jak elastyczność. Gradle oferuje o wiele więcej funkcji niż Maven, ale co najważniejsze w wielu przypadkach Gradle oferuje bezbolesną ścieżkę przejścia z dala od Mavena.

 80
Author: Steven Devijver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-07 23:44:24

Może to być nieco kontrowersyjne, ale Gradle nie ukrywa faktu, że jest to pełnoprawny język programowania.

Ant + ant-contrib jest zasadniczo kompletnym językiem programowania Turinga, w którym nikt tak naprawdę nie chce programować.

Maven stara się przyjąć odwrotne podejście, starając się być całkowicie deklaratywny i zmuszając cię do napisania i skompilowania wtyczki, jeśli potrzebujesz logiki. Narzuca również model projektu, który jest całkowicie nieelastyczny. Gradle łączy w sobie to, co najlepsze wszystkie te narzędzia:

  • jest zgodny z konwencją-over-configuration (ala Maven), ale tylko w zakresie, w jakim tego chcesz
  • pozwala na pisanie elastycznych zadań niestandardowych, takich jak w Ant
  • zapewnia wsparcie dla wielu modułów, które jest lepsze zarówno dla Ant i Maven
  • posiada DSL, który sprawia, że 80% rzeczy jest łatwe, a 20% rzeczy możliwe (w przeciwieństwie do innych narzędzi do budowania, które sprawiają, że 80% jest łatwe, 10% możliwe i 10% skutecznie niemożliwe).

Gradle jest najbardziej konfigurowalne i elastyczne narzędzie do budowania, którego jeszcze nie używałem. Wymaga to pewnych inwestycji z góry, aby nauczyć się DSL i koncepcji, takich jak konfiguracje, ale jeśli potrzebujesz bezsensownego i całkowicie konfigurowalnego narzędzia do budowania JVM, trudno go pokonać.

 64
Author: omnisis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-28 04:23:16

Gradle ładnie łączy Ant i Mavena, czerpiąc z obu frameworków to, co najlepsze. Elastyczność od Ant i konwencji nad konfiguracją, zarządzaniem zależnościami i wtyczkami od Maven.

Więc jeśli chcesz mieć standardową kompilację Javy, jak w mavenie, ale zadanie testowe musi wykonać jakiś Niestandardowy krok, może to wyglądać jak poniżej.

Buduj.gradle:

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

Do tego używa składni groovy, która daje znacznie większą moc wyrażeń niż xml ant / Mavena.

Jest to superset of Ant - możesz używać wszystkich zadań Ant w gradle z ładniejszą, groovy-podobną składnią, tj.

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

Lub

ant.with{
  delete "x.txt"
  mkdir "abc"
  copy file:"a.txt", toDir: "abc"
}
 49
Author: piotrga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-02 15:47:23

Używamy Gradle i wybraliśmy go zamiast Mavena i Anta. Ant dał nam całkowitą elastyczność, a Ivy daje lepsze zarządzanie zależnościami niż Maven, ale nie ma wielkiego wsparcia dla kompilacji wielu projektów. W końcu robisz dużo kodowania, aby wspierać Kompilacje wielu projektów. Również posiadanie pewnej konwencji budowania jest miłe i sprawia, że skrypty budowania są bardziej zwięzłe. W przypadku Mavena zbyt daleko zajmuje budowanie według Konwencji, a dostosowywanie procesu budowania staje się hack. Ponadto Maven Promuje każdy projekt publikujący artefakt. Czasami masz projekt podzielony na podprojekty, ale chcesz, aby wszystkie podprojekty były zbudowane i wersjonowane razem. Nie jest to coś, do czego Maven jest stworzony.

Z Gradle możesz mieć elastyczność Ant i budować według konwencji Mavena. Na przykład trywialne jest wydłużenie tradycyjnego cyklu życia kompilacji za pomocą własnego zadania. I nie jesteś zmuszony do korzystania z Konwencji, jeśli nie chcesz. Groovy jest o wiele ładniejszy w kodowaniu niż XML. W Gradle możesz zdefiniować zależności między projektami w lokalnym systemie plików bez konieczności publikowania artefaktów dla każdego z nich w repozytorium. Wreszcie, Gradle używa Ivy, więc ma doskonałe zarządzanie zależnościami. Jedynym prawdziwym minusem dla mnie jak na razie jest brak dojrzałej integracji Eclipse, ale opcje dla Mavena nie są naprawdę dużo lepsze.

 35
Author: BCK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-03 08:55:50

To nie jest Moja odpowiedź, ale zdecydowanie rezonuje ze mną. To z radaru Technologicznego ThoughtWorks z października 2012:

Dwie rzeczy spowodowały zmęczenie narzędziami do budowania opartych na XML, takimi jak Ant i Maven: za dużo wściekłych spiczastych szelek i gruba wtyczka architektury. Natomiast kwestie składni można rozwiązywać poprzez generacji, architektury wtyczek znacznie ograniczają możliwość budowania narzędzia, aby rozwijać się z wdziękiem, gdy projekty stają się bardziej złożone. We have come czuć, że wtyczki są złym poziomem abstrakcji i wolą narzędzi opartych na języku, takich jak Gradle i Rake, ponieważ oferują drobnoziarniste abstrakcje i większa elastyczność w dłuższej perspektywie.

 21
Author: Ed Staub,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-02 19:52:13

Gradle przywrócił zabawę do oprogramowania do budowy/montażu. Używałem ant do tworzenia oprogramowania przez całą moją karierę i zawsze uważałem, że prawdziwa "buildit" część pracy deweloperskiej jest złem koniecznym. Kilka miesięcy temu nasza firma zmęczyła się nie używaniem binarnego repo (aka sprawdzanie w słoikach do vcs) i otrzymałem zadanie zbadania tego. Zacząłem od ivy, ponieważ można go przykręcić do mrówki, nie miałem zbyt wiele szczęścia, aby opublikować moje zbudowane artefakty, tak jak chciałem. Poszedłem na maven i hacked away z xml, pracował wspaniale dla niektórych prostych libs helper ale natknąłem się na poważne problemy próbując połączyć aplikacje gotowe do wdrożenia. Męczyłem się przez jakiś czas googlując wtyczki i czytając fora i pobierałem biliony słoików wsparcia dla różnych wtyczek, z których ciężko mi było korzystać. W końcu poszedłem na gradle (robiąc się dość zgorzkniały w tym momencie i zirytowany, że " to nie powinno być takie trudne!")

Ale od pierwszego dnia mój nastrój zaczął się poprawiać. I was getting gdzieś. Migracja mojego pierwszego modułu ant zajęła mi dwie godziny, a plik budowania był w zasadzie niczym. Łatwo zamontować jeden ekran. Wielkie "wow" było: build scripts w xml, jak głupie to jest? fakt, że deklarowanie jednej zależności zajmuje jeden wiersz jest dla mnie bardzo atrakcyjny -> możesz łatwo zobaczyć wszystkie zależności dla danego projektu na jednej stronie. Od tego czasu jestem na bieżąco, na każdy problem, z jakim się do tej pory borykałem, jest proste i eleganckie rozwiązanie. Myślę, że są to uzasadnienie:

    Groovy jest bardzo intuicyjny dla programistów Javy
  • dokumentacja jest świetna do niesamowitej
  • elastyczność jest nieskończona

Teraz spędzam dni próbując wymyślić nowe funkcje, aby dodać je do naszego procesu budowania. Czy to nie chore?

 16
Author: Kalle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-23 09:41:54

Znacznie łatwiej jest też zarządzać natywnymi kompilacjami. Ant i Maven są w rzeczywistości tylko Java. Niektóre wtyczki istnieją dla Mavena, które próbują obsługiwać niektóre natywne projekty, ale nie wykonują skutecznej pracy. Można pisać zadania Ant, które kompilują natywne projekty, ale są one zbyt złożone i niewygodne.

Tworzymy Javę z JNI i wieloma innymi natywnymi bitami. Gradle znacznie uprościł nasz Mrówczy bałagan. Kiedy zaczęliśmy wprowadzać zarządzanie zależnościami do rodzimych projektów, było to niechlujne. My got Maven to zrobić, ale równoważny Kod Gradle był niewielki ułamek tego, co było potrzebne w Mavenie, a ludzie mogli go przeczytać i zrozumieć, nie stając się guru Maven.

 8
Author: swpalmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-23 20:09:57

Zgadzam się częściowo z Edem Staubem. Gradle jest zdecydowanie bardziej wydajny w porównaniu do Mavena i zapewnia większą elastyczność w dłuższej perspektywie.

Po wykonaniu oceny, aby przejść z Mavena do gradle, postanowiliśmy trzymać się samego Mavena przez dwa problemy natknęliśmy się na gradle (prędkość jest wolniejsza niż maven, proxy nie działało ) .

 3
Author: lives,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-24 10:31:38