公式ドキュメントに従って、非常に単純な 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 が私のアプリケーションをどのように正確に実行しているかを誰か説明できますか? この奇妙な動作は理にかなっていますか、それともバグと見なすべきですか?