Почему 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?
Прокомментировать это?
Ответы
Ответ 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 Руководство пользователя для более подробной информации.