HTML Diff
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 &lt;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"&gt; &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt; &lt;groupId&gt;edu.maven&lt;/groupId&gt; &lt;artifactId&gt;hello-maven&lt;/artifactId&gt; &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt; &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;junit&lt;/groupId&gt; &lt;artifactId&gt;junit&lt;/artifactId&gt; &lt;version&gt;3.8.1&lt;/version&gt; &lt;scope&gt;test&lt;/scope&gt; &lt;/dependency&gt; &lt;/dependencies&gt; &lt;/project&gt;<p><strong>Hello world на Gradle:</strong></p>
6 &lt;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"&gt; &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt; &lt;groupId&gt;edu.maven&lt;/groupId&gt; &lt;artifactId&gt;hello-maven&lt;/artifactId&gt; &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt; &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;junit&lt;/groupId&gt; &lt;artifactId&gt;junit&lt;/artifactId&gt; &lt;version&gt;3.8.1&lt;/version&gt; &lt;scope&gt;test&lt;/scope&gt; &lt;/dependency&gt; &lt;/dependencies&gt; &lt;/project&gt;<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