WELD-001409: Неоднозначные зависимости для типа StepContext с квалификаторами @Default

Я пытаюсь запустить этот пример в режиме Java SE из моей командной строки Windows. Я собрал jar со всеми зависимостями, включенными в него, и запустил его из командной строки.

но продолжайте получать эту ошибку. Из этого ответа я понимаю, что в пути к классам во время выполнения может быть несколько классов StepContext.

теперь я заменил плагин maven-Assembly на плагин maven-shade, чтобы построить свою толстую банку, и я могу видеть следующее предупреждение при упаковке банки

[WARNING] javax.inject-1.jar, weld-se-2.2.15.Final.jar define 6 overlapping classes: 
[WARNING] - javax.inject.Inject 
[WARNING] - javax.inject.Singleton 
[WARNING] - javax.inject.Scope 
[WARNING] - javax.inject.Named 
[WARNING] - javax.inject.Provider 
[WARNING] - javax.inject.Qualifier 

Я обновил следующую зависимость для предоставленного, и теперь я не вижу вышеупомянутое предупреждение при упаковке, но все еще получаю исключения при запуске вновь сгенерированного jar

<dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
            <scope>provided</scope>
        </dependency>

Текущее исключение при выполнении файла JAR

Exception 0 :
org.jboss.weld.exceptions.DeploymentException: WELD-001409: Ambiguous dependencies for type InjectionPoint with qualifiers @Default
  at injection point [BackedAnnotatedParameter] Parameter 1 of [BackedAnnotatedMethod] @Produces @BatchProperty public org.jberet.creation.BatchBeanProducer.getStringList(InjectionPoint)
  at org.jberet.creation.BatchBeanProducer.getStringList(BatchBeanProducer.java:0)
  Possible dependencies:
  - Implicit Bean [javax.enterprise.inject.spi.InjectionPoint] with qualifiers [@Default],
  - Managed Bean [class org.jboss.weld.manager.BeanManagerImpl$InstanceInjectionPoint] with qualifiers [@Any @Default],
  - Managed Bean [class org.jboss.weld.injection.EmptyInjectionPoint] with qualifiers [@Any @Default]

        at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:392)
        at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:294)
        at org.jboss.weld.bootstrap.Validator.validateGeneralBean(Validator.java:135)
        at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:168)
        at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:543)
        at org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:68)
        at org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:66)
        at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:60)
        at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:53)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
Exception 0 :
org.jboss.weld.exceptions.DeploymentException: WELD-001409: Ambiguous dependencies for type InjectionPoint with qualifiers @Default
  at injection point [BackedAnnotatedParameter] Parameter 1 of [BackedAnnotatedMethod] @Produces @BatchProperty public org.jberet.creation.BatchBeanProducer.getStringBuilder(InjectionPoint)
  at org.jberet.creation.BatchBeanProducer.getStringBuilder(BatchBeanProducer.java:0)
  Possible dependencies:
  - Implicit Bean [javax.enterprise.inject.spi.InjectionPoint] with qualifiers [@Default],
  - Managed Bean [class org.jboss.weld.manager.BeanManagerImpl$InstanceInjectionPoint] with qualifiers [@Any @Default],
  - Managed Bean [class org.jboss.weld.injection.EmptyInjectionPoint] with qualifiers [@Any @Default]

        at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:392)
        at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:294)
        at org.jboss.weld.bootstrap.Validator.validateGeneralBean(Validator.java:135)
        at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:168)
        at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:543)
        at org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:68)
        at org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:66)
        at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:60)
        at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:53)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

        at org.jboss.weld.bootstrap.ConcurrentValidator.validateBeans(ConcurrentValidator.java:76)
        at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:504)
        at org.jboss.weld.bootstrap.WeldStartup.validateBeans(WeldStartup.java:435)
        at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:90)
        at org.jboss.weld.environment.se.Weld.initialize(Weld.java:148)
        at org.jberet.se.SEArtifactFactory.<init>(SEArtifactFactory.java:29)
        at org.jberet.se.BatchSEEnvironment.getArtifactFactory(BatchSEEnvironment.java:133)
        at org.jberet.operations.JobOperatorImpl.<init>(JobOperatorImpl.java:93)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at java.lang.Class.newInstance(Unknown Source)
        ... 8 more

Как я могу решить эту проблему?

2 ответа

Мне кажется, что ваше выравнивание приводит к тому, что реализация сварки заканчивается в jar w/ a beans.xml, в результате чего непреднамеренные части библиотеки отображаются как управляемые bean-компоненты из-за режима обнаружения bean-компонента "all" (который также является случай пустого файла beans.xml без версии).

Вы должны минимально удостовериться, что это bean-discovery-mode="annotated", если вы собираетесь поместить сварной шов в одну большую банку с вашим приложением.

Наконец удалось запустить исполняемый (толстый) JAR пакетной программы Java в режиме Java SE с использованием реализации JBERET.

Эта ссылка упоминала, что, и как только я перешел на 2.4.5. Наконец, он работал нормально.

До недавнего времени вложенный / толстый JAR не работал со Weld, пока он не был исправлен в Weld 2.3.4 с WELD-1930

Другие вопросы по тегам