2011-05-31 40 views
0

繼官方documentation後,我實現了一個非常簡單的Java SE焊接快速啓動類。Netbeans:奇怪的焊接行爲

@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文件(單擊「清理並生成」),我的消息不會被打印。

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運行我的應用程序?這種奇怪的行爲是否有意義或應該被視爲一個錯誤?

回答

1

我想,如果你忘記了META-INF/beans.xml中焊縫不拿起你的註釋組件,你檢查是否有在classpath中META-INF/beans.xml文件?

+0

嗯,這是我的src/META-INF文件夾...但也許(僅僅是可能),運行爆炸時的Netbeans不包括它在運行的類路徑。 – 2011-08-12 21:41:02