Управление hk2 и dagger2 в зависимостях в gradle - PullRequest
0 голосов
/ 28 февраля 2020

Мой проект, project, использовал HK2 для DI, и сейчас я пытаюсь перенести его на использование dagger2. Это зависит от библиотеки lib, которая использует HK2 для DI. Зависимости управляются с помощью Gradle.

Один из моих классов выглядит следующим образом:

package com.mine;

import lib.LibService;
import lib.LibType;

public class MyClass {
    private final LibService<LibType> service;

    @Inject
    public MyClass(LibService<LibType> service) {
        this.service = service;
    }

    //...
}

Когда я пытаюсь запустить код, я получаю ошибку, вызванную HK2: There was no object available for injection at SystemInjecteeImpl(requiredType=LibService<LibType>,parent=MyClass,...). Проходя через отладчик, я вижу, что HK2 обрабатывает аннотацию @Inject вместо Dagger2. Вполне вероятно, что мои модули Dagger2, компоненты и т. Д. c. не совсем правы, и мне нужно это исправить. Несмотря на это, я не хочу, чтобы HK2 "обрабатывал" @Inject в конструкторе MyClass. Чтобы усложнить ситуацию, есть много других переходных зависимостей от lib, которые я хочу, например javax.ws.rs.POST.

Я попытался удалить HK2 из моих зависимостей, но это вызывает ошибку Caused by: java.lang.ClassNotFoundException: org.glassfish.hk2.utilities.binding.BindingBuilder изнутри lib.

configurations.all {
    exclude group: 'org.glassfish.hk2'
}

Как настроить Gradle на использование hk2 для lib, но НЕ для MyClass или других вещей в project, включая другие переходные зависимости от lib, которые Хочу?

...