Несколько дней новогоднего волшебства:
Успейте начать обучение в 2018-ом году со скидкой до 30%!
Выбрать курс

Кто круче: Maven или Gradle?

vMIspRPUnEY.jpg

Таким вопросом часто задаются начинающие разработчики, выбирая лучший сборщик для своего Java-проекта. Давайте попробуем немного разобраться в этом совсем неоднозначном вопросе.

Кто проще?

Скрипты сборки Gradle, написанные на Groovy, на порядок короче XML, используемых Maven. Разница заметна уже на hello world.

Hello world на Maven:

<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/xsd/maven-4.0.0.xsd">
  <modelversion>4.0.0</modelversion>

  <groupid>edu.maven</groupid>
  <artifactid>hello-maven</artifactid>
  <version>1.0-SNAPSHOT</version>

  <dependencies>
    <dependency>
      <groupid>junit</groupid>
      <artifactid>junit</artifactid>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

Hello world на Gradle:

// build.gradle
apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.slf4j:slf4j-api:1.7.25'
    testCompile 'junit:junit:4.12'
}

Обратите внимание, что зависимость в Gradle записывается одной (!) строкой, вместо 4-6 в Maven. Но за простотой скриптов скрываются сложная модель сборки, особенности Groovy и DSL Gradle. Удивительно, но в этом build.gradle записаны не массивы и задание параметров, а полноценные вызовы методов (!). А аналог scope в Gradle называется конфигурацией, и их может быть 13, помимо пользовательских. Проще ли это?

Кто быстрее?

Безусловно, Gradle быстрее Maven. Впечатляющие графики и GIF-ку можно посмотреть здесь. Чтобы Gradle максимально быстро собирал ваш проект, в нём используются всевозможные кэши и даже специальный процесс – Gradle Daemon, живущий после сборки. Но если вы отключите Gradle Daemon на CI (или осуществляете сборку не так часто), то прирост в скорости станет не такой очевидный.

У кого инфраструктура?

Если присмотреться к вышеописанному build.gradle, то можем увидеть упоминание Maven в конфигурации. Да, вы не ошиблись, Gradle загружает зависимости из Maven-репозитория — у Gradle нет собственной инфраструктуры, это просто сборщик. И если вы решили разрабатывать библиотеку на Gradle, то придётся не только загружать её в Maven-репозиторий, но генерировать и сам pom.xml.

Так кто же круче?

Напишите в комментариях!

Автор
0 комментариев
Для комментирования необходимо авторизоваться