Gradle inject root путь класса проекта к зависимостям - PullRequest
0 голосов
/ 19 февраля 2020

Я строю библиотеку, которая имеет отдельные точки входа (например, сервер, gui), с различными зависимостями. Каждая точка входа находится в отдельном подпроекте со своими собственными зависимостями.

В проекте root, с которого я начинаю сборку, я хочу выбрать точку входа и строить только с этими зависимостями. Это работает.

Но я хочу создать экземпляр класса (например, MainClass) проекта root из точки входа в библиотеку, и я не могу добавить путь к классу root projects к зависимости. ( Диаграмма )

Root Файл сборки проектов теперь выглядит следующим образом:

dependencies{
    implementation project(':server')
}

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Мне кажется, что было бы легче понять и прояснить, если бы проекты точек входа зависели от основного API, а не наоборот. Вы можете иметь структуру проекта, такую ​​как:

settings.gradle
core/
  build.gradle
  src/
server/
  build.gradle
  src/
gui
  build.gradle
  src/

server и gui Project build.gradle файлы должны содержать:

dependencies {
  implementation project(':core')
}

Проект, который использует библиотеку, может зависеть от сервера и / или GUI проецирует и создает экземпляр необходимого класса (ServerEntry или GuiEntry) напрямую.

Если вы хотите иметь возможность переключаться между различными реализациями точек входа без изменения кода в проекте, который использует экземпляр точки входа I Я бы предложил использовать инфраструктуру внедрения зависимостей (Spring, Guice, Dagger). Внедрение зависимостей поможет отделить конфигурацию (привязку интерфейсов к классам) от реального приложения.

0 голосов
/ 04 марта 2020

Я решил свою проблему с Композитная сборка . Я добавил includeBuild '../path-to-lib' в settings.gradle, чем создал подпроект Project в библиотеке с соответствующим пакетом и именем класса. При запуске выдает ошибку, что разработчик должен создать этот класс. Также важно добавить все подпроекты в одну группу:

allprojects{
    group = 'library-group'
}

В хост-проекте я могу зависеть от библиотеки:

dependencies{
    implementation module('library-group:suproject')
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...