2017-10-03 9 views
0

Windowsのコマンドプロンプトからjava SEモードでthisの例を実行しようとしています。私はそれに含まれているすべての依存関係を持つjarファイルを作成し、コマンドプロンプトから実行しています。WELD-001409:修飾子@Defaultを持つStepContext型のあいまいな依存関係

でも、thisエラーが発生します。 this answerから、私は実行時クラスパスに複数のStepContextクラスが存在する可能性があることを理解しています。

私は今、私の脂肪のjarファイルを構築するのmaven-シェードプラグインでのmaven-アセンブリのプラグインを交換し、瓶に

[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 

どうすればこの問題を解決できますか?

+0

2.3.4 WARNING] - javax.inject.Singleton [WARNING] - javax.inject.Inject [WARNING] - javax.inject.Singleton [WARNING] [警告] javax.inject.jar、weld-se-2.2.15.Final.jarは、6つのオーバーラップするクラスを定義します。 - 警告: [警告] - javax.inject.Named [警告] - javax.inject.Provider [警告] - javax.inject.Qualifier – yathirigan

+0

異常な部分は、Weldがjavax.inject SPIクラス 'InjectionPoint'のあいまいな依存関係について不平を言っていることです。通常、この種のエラーはアプリケーションBeanクラスによって発生します。アプリケーションBeanクラスは独自のクラスであるため、デバッグが容易です。両方のクラス( 'EmptyInjectionPoint'と' org.jboss.weld.manager.BeanManagerImpl.InstanceInjectionPoint'は 'InjectionPoint'を実装しているのであいまいですが、なぜWeldが自分のクラスと混同しているのか分かりません。コンフィグレーションが失われたり、上書きされたりすることがあります。 – cheng

+0

WeldとCDIの専門家にフォローアップするか、問題がJBeret側にあると思われる場合は、再現可能なテストアプリケーションを使用してJBeret問題を提出してください。 – cheng

答えて

0

私はあなたのフラット化によって、ウェルイングの実装が、beanの発見モード "all"のためにライブラリの意図しない部分がマネージドBeanとして表示されるようになりました"(これは、バージョンのない空のbeans.xmlの場合も同様です)。

ウェルディングインプレッションをあなたのアプリケーションと一緒に1つのビッグジャーに入れる場合は、bean-discovery-mode = "annotated"である必要があります。

+0

ok、bean-discovery-mode = "annotated"を指定してbeans.xmlを追加して、アプリケーションを実行してみましょう – yathirigan

0

最後に、JBERET実装を使用してJava SEモードでJavaバッチプログラムの実行可能(fat)JARを実行することができました。

This linkと言っていましたが、いったん2.4.5に切り替えました。最終的にうまくいきました。出力以下の私の脂肪のJARショーを構築するためにMavenのシェードプラグインを使用する場合

それが溶接で固定されていますまで、脂肪/最近、ネストされたJARは、溶接で働いていなかったまでは[WELD-1930と

関連する問題