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

Почему Gradle нужен файл settings.gradle?

Я собираюсь преобразовать свои проекты Android с Ant на Gradle.

Рабочее пространство My Eclipse очень просто:

Workspace
     MyApp
     MyApp-AndroidLibrary

Когда я добавляю файл build.gradle в MyApp, я хочу ссылаться на свой проект библиотеки Android:

apply plugin: 'android'

dependencies {
     compile fileTree(dir: 'libs', include: '*.jar')
     compile project(':MyApp-AndroidLibrary')
}

Когда я запускаю конструкцию gradle, появляется ошибка "Project with path": MyApp-AndroidLibrary "не найден в корневом проекте", я искал ее для поиска и нашел, что мне нужно настроить "settings.gradle" "в моем каталоге рабочей области, чтобы добавить

include ":MyApp"
include ":MyApp-AndroidLibrary"

Это выглядит слишком плохо для меня, почему gradle нужен файл settings.gradle, почему бы просто не извлечь проекты, определенные в зависимостях?

А что означает include? Что делать, если у меня есть приложение anotoher и некоторые другие общие библиотеки в рабочей области, структура может выглядеть так:

Workspace
     App1
     App2
     Library1(Used by App1 & App2)
     Library2(Used only by App1)
     Library3(Used only by App2)

Потому что есть только ОДИН файл settings.gradle, мне пришлось добавить их все в settings.gradle. Это плохо пахнет.

И да, я могу реорганизовать структуру, чтобы сделать Library2 в дочернем каталоге App1, а Library3 - дочерним каталогом App2, но как насчет Library1?

Прокомментировать это?

4b9b3361

Ответ 1

Вы задаете несколько разных вопросов. Вот несколько советов:

  • ':MyApp-AndroidLibrary' - это логический путь проекта, который сопоставляется с физическим путем на основе информации, предоставленной в settings.gradle.
  • Многопроектная сборка может иметь произвольную структуру каталогов, которая настроена в settings.gradle. Не нужно перемещать каталоги вокруг, если вы не хотите.
  • Рабочее пространство Eclipse и Gradle build - это отдельные границы. Вы можете иметь несколько сборок в одном рабочем пространстве.
  • При работе с библиотеками, созданными из исходного кода, вы можете сделать их частью одной и той же сборки или иметь отдельную сборку для них. В последнем случае вам нужно обязательно создать библиотеку перед приложением и обменивать артефакты через репозиторий Maven или Ivy. Это можно было бы автоматизировать с использованием CI-сервера и корпоративного репозитория Maven/Ivy. Кроме того, вы можете запустить сборку библиотеки вручную на своем компьютере и использовать локальный репозиторий Maven/Ivy.

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

Ответ 2

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

Переместите файл settings.gradle в каталог My-App и замените include на includeFlat 'MyApp-AndroidLibrary'. Это должно устранить проблему.

Также сравните этот вопрос и см. этот раздел в Gradle Руководство пользователя для более подробной информации.