1

Weld-SEで遊んでいます。プラグ可能なモジュールを持つプロジェクトがあります。1つのモジュールで、溶接が機能します。を使用する他のモジュールweld-servlet-coreがクラスパスに配置されると (deps とともに)、CDI が動作を停止し、「依存関係 XY を解決できません」または (それを削除した後@Inject)のようなエラーが発生します。

Exception in thread "main" org.jboss.weld.exceptions.DeploymentException: WELD-001417 Enabled interceptor class <class>org.jboss.weld.environment.se.jpa.JpaTransactionInterceptor</class> in jar:file:/mnt/ssd1/data/.m2/repository/org/jboss/jawabot/JawaBot-core/2.0.0-SNAPSHOT/JawaBot-core-2.0.0-SNAPSHOT.jar!/META-INF/beans.xml@11 is neither annotated @Interceptor nor registered through a portable extension
    at org.jboss.weld.bootstrap.Validator.validateEnabledInterceptorClasses(Validator.java:466)
    ...

クラスにはありますが@Interceptor(同じクラスが他のモジュールで正常に動作します)。

をデバッグするWeldBootstrap#startContainer(Environment environment, Deployment deployment)と、 deployment.beanDeploymentArchive.beanClassesインターセプター ( "org.jboss.weld.environment.se.jpa.JpaTransactionInterceptor") が含まれます。

依存関係と TattleTale レポートを確認しましたが、すべて問題ないようです。

次に何を見たり試したりするべきか?

プロジェクトはhttp://ondrazizka.googlecode.com/svn/trunk/bots/JawaBot/branches/2.0/にあります。エラーを表示するには、mvn dependency:copy-dependencies java -cp ... org.jboss.jawabot を実行します。 JawaBotApp または、単純に NetBeans で Web モジュールを実行します。

ありがとう、オンドラ

更新: JIRA: https://issues.jboss.org/browse/WELD-940
また、Weld のスキャン拡張機能のバグが原因である可能性があることがわかりました<weld:scan>

4

1 に答える 1

1

これは、Weld のスキャン拡張機能を使用したことが原因でした<weld:scan>:

要素にパッケージ ワイルドカードが含まれていたため<includes>、両方の「パッケージ」 (CDI / Weld の用語 IIUC では .jar) でクラスが一致しました。

使い方が悪いのか、バグなのかわかりません。
JIRA を参照してください: https://issues.jboss.org/browse/WELD-940

于 2011-07-13T06:36:39.740 に答える