Почему использование Gradle вместо Муравья или Знатока? [закрытый]

Убедитесь, что все ваши файлы ресурсов не имеют расширения в верхнем регистре. Я обнаружил, что сохранил несколько изображений с расширением в верхнем регистре .PNG. Я изменил его на .png и все вернулось на круги своя.

324
задан Matt 30 August 2016 в 00:06
поделиться

4 ответа

Я сам не использую Gradle в гневе (пока это просто игрушечный проект) [автор означает, что они использовали Gradle пока только в игрушечном проекте, не то чтобы Gradle - это игрушечный проект - см. Комментарии] , но я бы сказал, что причины, по которым можно было бы рассмотреть возможность его использования, заключаются в разочарование Ant и Maven.

По моему опыту, Ant часто предназначен только для записи (да, я знаю, что можно написать красиво модульные, элегантные сборки , но факт в том, что большинство людей этого не делают ). Для любых нетривиальных проектов он становится умопомрачительным и уделяет большое внимание обеспечению действительно переносимости сложных сборок. Его императивный характер может привести к репликации конфигурации между сборками (хотя здесь могут помочь макросы).

Maven придерживается противоположного подхода и ожидает, что вы полностью интегрируетесь с жизненным циклом Maven. Опытных пользователей Ant это особенно раздражает, поскольку Maven лишает вас многих свобод, имеющихся в Ant. Например, есть блог Sonatype , в котором перечисляются многие критические замечания Maven и их ответы.

Механизм плагина Maven позволяет создавать очень мощные конфигурации сборки, а модель наследования означает, что вы можете определить небольшой набор родительских POM, инкапсулирующие ваши конфигурации сборки для всего предприятия и отдельных проектов, могут наследовать эти конфигурации, делая их легкими. Конфигурация Maven очень подробна (хотя Maven 3 обещает решить эту проблему), и если вы хотите сделать что-то, что «не является способом Maven», вам нужно написать плагин или использовать хакерскую интеграцию с Ant. Заметьте, мне нравится писать плагины Maven, но я понимаю, что многие будут возражать против этих усилий.

Gradle обещает найти золотую середину между Ant и Maven. Он использует подход Ivy для разрешения зависимостей. Это позволяет соглашаться с конфигурацией, но также включает задачи Ant как первоклассные граждане. Это также разумно позволяет вам использовать существующие репозитории Maven / Ivy.

Так что, если вы столкнулись и застряли с какой-либо из проблемных точек Ant / Maven, вероятно, стоит попробовать Gradle, хотя, на мой взгляд, остается быть замеченным, если бы вы не просто обменивали известные проблемы на неизвестные. Доказательство того, что пудинг есть в еде, хотя я бы отложил суждение до тех пор, пока продукт не станет немного более зрелым, и другие не устранят любые изломы (они называют это передним краем по причине). Я'

248
ответ дан 23 November 2019 в 00:53
поделиться

Gradle можно использовать для многих целей - это гораздо лучший швейцарский армейский нож, чем Ant, - но он специально ориентирован на многопроектные сборки.

Прежде всего, Gradle - это программирование зависимостей. tool, что также означает, что это инструмент программирования. С помощью Gradle вы можете выполнить любую случайную задачу в своей настройке, а Gradle позаботится о том, чтобы все объявленные зависимости правильно и своевременно выполнялись. Ваш код может быть размещен во многих каталогах в любом виде (дерево, плоский, разбросанный, ...).

Gradle имеет две отдельные фазы: оценка и выполнение. По сути, во время оценки Gradle будет искать и оценивать сценарии сборки в каталогах, которые он должен искать. Во время выполнения Gradle будет выполнять задачи, которые были загружены во время оценки, с учетом взаимозависимостей задач.

Вдобавок к этим функциям программирования зависимостей Gradle добавляет функции зависимостей проекта и JAR путем интеграции с Apache Ivy. Как вы знаете, Ivy - гораздо более мощный и менее самоуверенный инструмент управления зависимостями, чем Maven.

Gradle обнаруживает зависимости между проектами и между проектами и JAR-файлами. Gradle работает с репозиториями Maven (загрузка и выгрузка), такими как iBiblio или с вашими собственными репозиториями, но также поддерживает и другие виды инфраструктуры репозиториев, которые могут быть у вас.

В многопроектных сборках Gradle адаптируется и адаптируется к структуре сборки и архитектура. Вам не нужно адаптировать свою структуру или архитектуру к вашему инструменту сборки, как это требовалось бы с Maven.

Gradle очень старается не мешать вам, а Maven почти никогда не делает этого. Согласованность - это хорошо, но гибкость тоже.

79
ответ дан 23 November 2019 в 00:53
поделиться

Gradle прекрасно сочетает в себе Ant и Maven, взяв лучшее от обеих сред. Гибкость от Ant и соглашение о конфигурации, управлении зависимостями и надстройками от Maven.

Итак, если вы хотите иметь стандартную сборку java, например, в maven, но тестовая задача должна выполнять какой-то настраиваемый шаг, это может выглядеть так, как показано ниже.

build.gradle:

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

Вдобавок он использует отличный синтаксис, который дает гораздо больше возможностей выражения, чем xml ant / maven.

Это расширенный набор Ant - вы можете использовать все задачи Ant в Gradle с более приятным синтаксисом, похожим на Groovy, т.е.

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

или

ant.with{
  delete "x.txt"
  mkdir "abc"
  copy file:"a.txt", toDir: "abc"
}
49
ответ дан 23 November 2019 в 00:53
поделиться

Мы используем Gradle и выбрали его вместо Maven и Ant. Ant дал нам полную гибкость, а Ivy обеспечивает лучшее управление зависимостями, чем Maven, но нет хорошей поддержки для многопроектных сборок. В конечном итоге вам придется много писать для поддержки многопроектных сборок. Также приятно иметь некоторую сборку по соглашению, которая делает сценарии сборки более лаконичными.С Maven сборка по соглашению заходит слишком далеко, и настройка процесса сборки превращается в хитрость. Кроме того, Maven продвигает каждый проект, публикующий артефакт. Иногда у вас есть проект, разбитый на подпроекты, но вы хотите, чтобы все подпроекты были собраны и версированы вместе. Не совсем то, для чего предназначен Maven.

С Gradle вы можете иметь гибкость Ant и строить по соглашению Maven. Например, легко расширить обычный жизненный цикл сборки с помощью вашей собственной задачи. И вас не заставляют использовать соглашение, если вы этого не хотите. Groovy намного удобнее кодировать, чем XML. В Gradle вы можете определять зависимости между проектами в локальной файловой системе без необходимости публиковать артефакты для каждого из них в репозитории. Наконец, Gradle использует Ivy, поэтому у него отличное управление зависимостями. Единственным реальным недостатком для меня до сих пор является отсутствие зрелой интеграции с Eclipse, но варианты для Maven на самом деле не намного лучше.

35
ответ дан 23 November 2019 в 00:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: