Как сделать полностью независимый модуль в мультипроекте Gradle - PullRequest
1 голос
/ 07 января 2020

Я хочу разработать часть программного обеспечения на java с некоторыми графическими интерфейсами (в частности, приложение android). Я хотел бы, чтобы базовая функциональность была автономным модулем, который полностью независим от любого GUI или другого программного уровня, который мог бы быть построен поверх.

Основной модуль - это сам проект Gradle:

core
├── src
├── build.gradle
└── settings.gradle

Для приложения оно включено как подмодуль git в репозиторий root:

project
├── app
│   ├── src
│   └── build.gradle
├── core
│   ├── src
│   ├── build.gradle
│   └── settings.gradle
├── build.gradle
└── settings.gradle

Поскольку основной модуль независим и имеет собственный репозиторий, у меня есть уметь рассматривать его как проект Gradle root; следовательно, у него есть свой собственный settings.gradle. Но когда я работаю в проекте root, я хочу, чтобы он вел себя как подпроект последнего (так что выполнение gradle в каталоге core распознает его как подпроект :core с использованием settings.gradle в родительский каталог). И без изменения содержимого core (который будет подмодулем git).

Я не хочу создавать отдельную ветку в репо core git, в которой нет settings.gradle, потому что в этой ветке репо не имеет смысла само по себе, и, опять же, core не должен "ничего знать" о проекте root.

Идеальным решением будет альтернативная версия git подмодулей, в которой пользовательские изменения в подмодуле могут быть привязанным к родительскому репо в одиночку, не затрагивая исходное репо подмодуля. (С возможностью слияния вышестоящих изменений в подмодуле с локальными коммитами.) Затем я бы добавил один такой «локальный» коммит, который удаляет файл core/settings.gradle.

Есть ли способ добиться этого?

1 Ответ

1 голос
/ 07 января 2020

Одним из решений здесь является разработка всех модулей как отдельных проектов с независимыми репозиториями Git. Затем используйте Maven для импорта библиотеки core в project. Вы даже должны рассмотреть возможность публикации core в частном репозитории Maven, который вы можете добавить в свой файл build.gradle в project.

...