Конфигурация интерфейса DeltaSpike не подлежит инъекции - PullRequest
0 голосов
/ 28 апреля 2020

В настоящее время я пытаюсь следовать документации для использования DeltaSpike в Java SE и создал простой интерфейс для тестирования, но, похоже, я что-то не так делаю.

В соответствии с документацией здесь я должен быть в состоянии выполнить настройку интерфейса: https://deltaspike.apache.org/documentation/configuration.html#_interface_based_configuration

@Configuration(prefix = "application.")
public interface AppConfig {

    @ConfigProperty(name = "name", evaluateVariables = false)
    String getApplicationName();
}

Я пробовал использовать его как через BeanProvider#getContextualReference, так и с @Inject.

@Inject
public Commandler(final AppContext context, final BeanManager beanManager, AppConfig app) {
    this.appContext = context;
    this.beanManager = beanManager;
    logger.info("Initialization application with name {}.", app.getApplicationName());
    logger.info("Loaded all configuration and dependencies in {}.", appContext.getTimeSinceStartupFormatted());
}
Exception in thread "main" org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type AppConfig with qualifiers @Default

Я также получаю предупреждение:

Неудовлетворенная зависимость: ни один компонент не соответствует точке внедрения

Я пытался поиграться с файлом beans.xml и зависимости в build.gradle, но безрезультатно, и я не уверен, что делаю неправильно по сравнению с документацией.

Может ли кто-нибудь попытаться указать мне правильное направление?

1 Ответ

0 голосов
/ 29 апреля 2020

Я нашел решение проблемы, которая на самом деле не с DeltaSpike, а с Weld, который я использую под капотом.

Проблема и решение очень хорошо задокументированы здесь:
https://discuss.gradle.org/t/application-plugin-run-task-should-first-consolidate-classes-and-resources-folder-or-depend-on-installapp-or-stuff-like-weld-se-wont-work/1248

Я приведу его здесь на случай, если ссылка умрет, проблема вызвана тем, что Gradle создает разделенные main и resource, поэтому сначала ресурс выходные данные нужно изменить, чтобы соединить их так:

sourceSets {
    main {
        output.resourcesDir = output.classesDirs.singleFile
    }

    test {
        output.resourcesDir = output.classesDirs.singleFile
    }
}

Это просто устанавливает вывод ресурса в каталог классов.

Теперь нам нужно запустить приложение с Gradle вместо нашего В IDE мы добавляем плагин application.

plugins {
    id "application"
    id "java"
    id "io.spring.dependency-management" version "1.0.9.RELEASE"
}

Теперь, когда у вас есть плагин application, вам нужно будет указать и основной класс.

application {
    mainClassName = "org.elypia.deltaspike.Main"
}

Затем с помощью application плагин, выполните run, и вы должны быть хороши для go.

Если вы используете аннотации Deltaspike, вам может потребоваться изменить ваш beans.xml, чтобы найти all скорее чем просто annotated, так как некоторые аннотации, которые вы можете использовать, могут не быть andard CDI аннотации.

Редактировать: я отправил свое тестовое репо в GitLab, чтобы его могли видеть все:
https://gitlab.com/SethiPandi/mini-deltaspike

...