Подтвердить что ты не робот

Какова цель Gradle?

Я мог бы немного помочь понять концепции Gradle (плагин v 0.7) в контексте Android Studio 0.4.0. Я раньше не использовал Gradle, и это вызывало у меня ничего, кроме проблем. Я не вижу его цели/выгоды, потому что я не знаю достаточно об этом.

Некоторые конкретные вопросы, которые у меня есть

  • Каковы эти зависимости? Я делаю простое приложение с навигационный ящик, ориентированный на API 11+, где он должен быть изначально поддерживается. Какие зависимости я могу использовать?

  • Что такое Gradle обертка? Какие изменения, если таковые имеются, внесены в завершенное приложение?

  • Почему Gradle нужно постоянно подключаться к сети? У меня нет когда я нахожусь на работе. Он получил до такой степени, что я не могу запустить или проверить свое приложение, потому что Gradle не может разрешить некоторый ресурс без доступа в Интернет.

  • Почему важно, чтобы Gradle использовал Groovy? Я искал вокруг Интернета, и это, как правило, то, что люди любят Gradle, но они обычно не объясняют, почему Groovy важно или что он делает для Android-приложения.

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

Спасибо

4b9b3361

Ответ 1

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

Создавайте такие инструменты, как Maven, Gradle, SBT, Leiningen и т.д., помогающие автоматизировать задачи, которые в противном случае мы могли бы вручную выполнить или "вручную автоматизировать". Я использую последнее, чтобы описать, что я использовал с Ant - писать пользовательские задачи для компиляции, запуска, генерации Javadoc и т.д., Чтобы задачи могли быть автоматизированы в будущем. Соглашаясь с конвенциями, первоначально определенными Maven и принятыми другими впоследствии (например, помещая ваш источник в src/main/java), это становится возможным. Если я следую соглашениям, инструмент построения может компилировать, запускать, генерировать Javadoc, test и все остальное с минимальной дополнительной работой.

Теперь на ваши вопросы (по порядку):

  • Еще одна важная функция инструментов сборки - уменьшить "jar hell", последовательно управляя зависимостями между сборками. Я просто указываю, какую версию Apache Commons или Google Guava или Spring или Jackson я хочу (или даже диапазон версий), и инструмент сборки загрузит их и поместит их где-нибудь, чтобы они могли находиться в пути к классам и в сборке, если это применимо (например, военный файл). Я также могу определить области действия - например, я хочу, чтобы эта зависимость была доступна во время компиляции, а другая - только во время выполнения. Должен ли я предоставить его явно, или он будет доступен? Такие вещи.
  • Это Gradle конкретный. Как описано здесь, оболочка Gradle помогает командам запускать Gradle без необходимости вручную устанавливать Gradle, а также поддерживать согласованность. Все используют одну и ту же версию. После того, как вы его настроите, вам никогда не придется беспокоиться об этом, и все задачи Gradle, которые вы хотите использовать, доступны через оболочку, поэтому вам не нужно даже беспокоиться о том, что это есть. Вы можете напрямую установить Gradle и запустить его напрямую, но я редко вижу точку.
  • Это общий. Ранее я упомянул об управлении зависимостями. Чтобы получить эти зависимости, инструмент сборки должен получить доступ в Интернет, где они доступны из Maven Central или кучу сторонних репозиториев. Еще одно новшество Maven, принятое другими, - это управление репозитариями, поэтому собранные артефакты публикуются в репозитории в соответствии с конвенцией, поэтому другие проекты могут их использовать. Обычно вам это неинтересно. Вы просто говорите инструменту, что вам нужна определенная зависимость, и он знает, как его схватить, потому что все следуют соглашениям. В ситуациях, когда у вас нет доступа к Интернету (что-то, о чем я хорошо знаком), ваши варианты - просто захватить все зависимости, когда вы находитесь в сети, а затем, возможно, настроить локальный репозиторий Maven, такой как Nexus или Artifactory, для публикации этих артефактов. Затем вы указываете свой инструмент построения, чтобы посмотреть там, а также Maven Central и т.д.
  • Maven настроен с использованием XML, и в то время это казалось действительно крутым. Но есть два последствия. Одна из них - конфигурация становится очень многословной. Другим является то, что становится трудно выполнять пользовательские вещи. Вы должны сделать все декларативно в XML, что многие считают болью. Вы настраиваете плагины в XML, или пишете свои собственные и обертываете их так, как Maven может понять и может быть настроен в XML. Гораздо проще и мощнее делать пользовательские сборки в коде. Gradle выбрал Groovy для этого, потому что Groovy делает хороший DSL и очень легко учиться для разработчиков Java, поступающих из Maven. SBT выбрал Scala, а Leiningen выбрал Clojure, потому что эти инструменты сборки нацелены на эти языки/платформы, поэтому разработчику Scala, к примеру, не нужно ничего научиться использовать SBT, кроме DSL. Но более общий вывод заключается в том, что использование кода, а не XML имеет много преимуществ.

Надеюсь, что это поможет.

Ответ 2

Каковы эти зависимости?

Есть так много классных библиотек, которые вы могли бы использовать. И многие из этих библиотек теперь поддерживают интеграцию с gradle. Поэтому больше не нужно импортировать проект и размещать его самостоятельно. Все размещено на mavencentral. Вам все еще нужна библиотека поддержки, например, даже если вы решили настроить таргетинг на API 11 +.

Что такое gradle обертка?

A gradle wrapper - отличный инструмент, если вы работаете в команде или, особенно, в проекте с открытым исходным кодом. Вам не нужно устанавливать gradle. Оболочка gradle будет загружать и кэшировать все его зависимости при первом запуске. Таким образом, все разработчики в вашей команде могут быстро построить проект.

Почему gradle нужно постоянно подключаться к сети?

Потому что зависимости нужно синхронизировать. Вам повезло, если вы используете Android Studio. Последняя версия поддерживает "автономный режим gradle".

Из примечания к выпуску:

Студия теперь поддерживает режим gradle Offline. Это полезно, если вы найдете самостоятельно без сетевого подключения, и ваши зависимости используются плюс-синтаксис для получения последней доступной версии. В таком случае, gradle будет один раз в день (по умолчанию) подключиться к артефакту репозиторий, чтобы узнать, есть ли более новая версия. Если эта сеть соединение не выполняется, сборка не выполняется. Если у вас нет сети соединение, это проблематично. Теперь вы можете открыть компилятоp > gradle и включить автономный режим, который будет сообщать gradleигнорировать обновления до даты:

gradle offline mode

Почему важно, чтобы gradle использовал Groovy?

Вы пишете плагины gradle в Groovy. И все ваши задачи gradle в build.gradle также.


Предостережение: я не эксперт в gradle. На самом деле, тоже относительно новый пользователь.

Ответ 3

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

Я просто не понимаю, почему это требование относится к проекту. Что делать, если я начинаю совершенно новый проект в Android Studio, с которым я хочу протестировать концепцию? Я не могу это сделать, если я не в сети, по крайней мере, один раз. Что делать, если у меня нет доступа к интернету в это время и вы хотите это сделать? Что тогда?

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

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

Итак, в настоящее время я не могу рекомендовать Gradle для использования на моем месте работы, что означает, что мы также продолжим использовать Eclipse для разработки Android, а не Android Studio. Похоже, это предельное требование, которое не кажется необходимым.

Ответ 4

Предположим, что понимание следующих пунктов служит усложненной основой:

  • Что такое классы, интерфейсы, API, пакеты, модули и библиотеки.

  • Каковы зависимости от модулей и что означает "управление зависимостями".

  • Сложность современных приложений. Даже если вы сделаете простое приложение "Hello, world" (это будет настольное приложение или веб-приложение), оно должно включать в себя дюжину (если не сто) различных библиотек. Все эти библиотеки предоставляют инфраструктуру вашему приложению, но многие из них напрямую не связаны с ней.

  • Если ваше приложение не является "Hello, world", а затем скрывает его сложность (путем правильной модуляции) и автоматизирует его сборку и тестирование (с помощью правильных инструментов сборки), становится решающим для успеха.

    /li >

С учетом этого понимания (и принимая во внимание драгоценные соображения, перечисленные уважаемыми коллегами выше), имеет смысл начать говорить gradle, ant, плющ и maven.