0

公式ドキュメントに従って、非常に単純な Java SE Weld クイックスタート クラスを実装しました。

@Singleton
public class TesteCDI {

    public void printHello(@Observes ContainerInitialized event, 
         @Parameters List<String> parameters) {
       System.out.println("Hello Weld!" + parameters);
   }
} 

私の実行構成が起動しますorg.jboss.weld.environment.se.StartMain

ここが面白い部分です。Jar ファイルを作成しないと ([Clean and Build] をクリックして)、メッセージが出力されません。

54 [main] INFO org.jboss.weld.Version - WELD-000900 1.1.0 (Final)
110 [main] INFO org.jboss.weld.Bootstrap - WELD-000101 Transactional services not available. Injection of @Inject UserTransaction not available. Transactional observers will be invoked synchronously.
388 [main] WARN org.jboss.interceptor.util.InterceptionTypeRegistry - Class 'javax.ejb.PostActivate' not found, interception based on it is not enabled
388 [main] WARN org.jboss.interceptor.util.InterceptionTypeRegistry - Class 'javax.ejb.PrePassivate' not found, interception based on it is not enabled

Jar ファイルを作成すると、コマンドラインと Netbeans の両方からすべてが正常に実行されます。したがって、Netbeans が jar からアプリケーションを実行していると想定しました。

問題は...そうではありません

Test クラスを更新して Netbeans から実行すると、変更が反映されます。コマンドラインからjarを実行すると、古いメッセージが出力されます。

プロジェクトをクリーンアップすると、Netbeans 起動構成がメッセージの出力を停止します。

Netbeans が私のアプリケーションをどのように正確に実行しているかを誰か説明できますか? この奇妙な動作は理にかなっていますか、それともバグと見なすべきですか?

4

1 に答える 1

1

META-INF/beans.xml を忘れた場合、weld は注釈付きコンポーネントを取得しないと思います。クラスパスに META-INF/beans.xml があるかどうかを確認しましたか?

于 2011-08-12T17:11:15.740 に答える