0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: xml, java, gradle, groovy, maven, hello world, dsl gradle, build.gradle, scope, gradle daemon, ci, pom.xml</p>
1
<p>Теги: xml, java, gradle, groovy, maven, hello world, dsl gradle, build.gradle, scope, gradle daemon, ci, pom.xml</p>
2
<p>Таким вопросом часто задаются начинающие разработчики, выбирая лучший сборщик для своего Java-проекта. Давайте попробуем немного разобраться в этом совсем неоднозначном вопросе.</p>
2
<p>Таким вопросом часто задаются начинающие разработчики, выбирая лучший сборщик для своего Java-проекта. Давайте попробуем немного разобраться в этом совсем неоднозначном вопросе.</p>
3
<h2>Кто проще?</h2>
3
<h2>Кто проще?</h2>
4
<p>Скрипты сборки Gradle, написанные на Groovy, на порядок короче XML, используемых Maven. Разница заметна уже на hello world.</p>
4
<p>Скрипты сборки Gradle, написанные на Groovy, на порядок короче XML, используемых Maven. Разница заметна уже на hello world.</p>
5
<p><strong>Hello world на Maven:</strong></p>
5
<p><strong>Hello world на Maven:</strong></p>
6
<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><p><strong>Hello world на Gradle:</strong></p>
6
<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><p><strong>Hello world на Gradle:</strong></p>
7
// build.gradle apply plugin: 'java' repositories { mavenCentral() } dependencies { compile 'org.slf4j:slf4j-api:1.7.25' testCompile 'junit:junit:4.12' }<p>Обратите внимание, что зависимость в<strong>Gradle</strong>записывается одной (!) строкой, вместо 4-6 в<strong>Maven</strong>. Но за простотой скриптов скрываются сложная модель сборки, особенности<strong>Groovy</strong>и<strong>DSL Gradle</strong>. Удивительно, но в этом<strong>build.gradle</strong>записаны не массивы и задание параметров, а полноценные вызовы методов (!). А аналог<strong>scope</strong>в<strong>Gradle</strong>называется конфигурацией, и их может быть 13, помимо пользовательских. Проще ли это?</p>
7
// build.gradle apply plugin: 'java' repositories { mavenCentral() } dependencies { compile 'org.slf4j:slf4j-api:1.7.25' testCompile 'junit:junit:4.12' }<p>Обратите внимание, что зависимость в<strong>Gradle</strong>записывается одной (!) строкой, вместо 4-6 в<strong>Maven</strong>. Но за простотой скриптов скрываются сложная модель сборки, особенности<strong>Groovy</strong>и<strong>DSL Gradle</strong>. Удивительно, но в этом<strong>build.gradle</strong>записаны не массивы и задание параметров, а полноценные вызовы методов (!). А аналог<strong>scope</strong>в<strong>Gradle</strong>называется конфигурацией, и их может быть 13, помимо пользовательских. Проще ли это?</p>
8
<h2>Кто быстрее?</h2>
8
<h2>Кто быстрее?</h2>
9
<p>Безусловно,<strong>Gradle</strong>быстрее<strong>Maven</strong>. Впечатляющие графики и GIF-ку можно посмотреть<a>здесь</a>. Чтобы<strong>Gradle</strong>максимально быстро собирал ваш проект, в нём используются всевозможные кэши и даже специальный процесс -<strong>Gradle Daemon</strong>, живущий после сборки. Но если вы отключите<strong>Gradle Daemon</strong>на<strong>CI</strong>(или осуществляете сборку не так часто), то прирост в скорости станет не такой очевидный.</p>
9
<p>Безусловно,<strong>Gradle</strong>быстрее<strong>Maven</strong>. Впечатляющие графики и GIF-ку можно посмотреть<a>здесь</a>. Чтобы<strong>Gradle</strong>максимально быстро собирал ваш проект, в нём используются всевозможные кэши и даже специальный процесс -<strong>Gradle Daemon</strong>, живущий после сборки. Но если вы отключите<strong>Gradle Daemon</strong>на<strong>CI</strong>(или осуществляете сборку не так часто), то прирост в скорости станет не такой очевидный.</p>
10
<h2>У кого инфраструктура?</h2>
10
<h2>У кого инфраструктура?</h2>
11
<p>Если присмотреться к вышеописанному<strong>build.gradle</strong>, то можем увидеть упоминание<strong>Maven</strong>в конфигурации. Да, вы не ошиблись,<strong>Gradle</strong>загружает зависимости из<strong>Maven</strong>-репозитория - у<strong>Gradle</strong>нет собственной инфраструктуры, это просто сборщик. И если вы решили разрабатывать библиотеку на<strong>Gradle</strong>, то придётся не только загружать её в<strong>Maven</strong>-репозиторий, но генерировать и сам<strong>pom.xml</strong>.</p>
11
<p>Если присмотреться к вышеописанному<strong>build.gradle</strong>, то можем увидеть упоминание<strong>Maven</strong>в конфигурации. Да, вы не ошиблись,<strong>Gradle</strong>загружает зависимости из<strong>Maven</strong>-репозитория - у<strong>Gradle</strong>нет собственной инфраструктуры, это просто сборщик. И если вы решили разрабатывать библиотеку на<strong>Gradle</strong>, то придётся не только загружать её в<strong>Maven</strong>-репозиторий, но генерировать и сам<strong>pom.xml</strong>.</p>
12
<h2>Так кто же круче?</h2>
12
<h2>Так кто же круче?</h2>
13
<p><em>Напишите в комментариях!</em></p>
13
<p><em>Напишите в комментариях!</em></p>
14
14