2014-09-21 86 views
2

我正在學習JavaEE CDI,並使用NetBeans 8.0 + Glassfish 4創建了一個小型應用程序。 升級到NetBeans 8.0.1和Glassfish 4.1後,會有很多錯誤報告某些軟件包不存在。 例如,我不能使用下面的代碼,因爲我收到包javax.enterprise.event不存在的消息。升級到NetBeans 8.0.1和Glassfish 4.1後不存在軟件包1,1

package jlacerda; 

import javax.inject.Inject; 
import javax.enterprise.event.Event; 

public class CMensagem 
{ 
    @Inject 
    private Event<Evento> gerarEvento; 

    public String getMensagem() 
    { 
     return "Hello world!"; 
    } 

    public void gerarEvento() 
    { 
     Evento evento = new Evento(); 
     evento.setMensagem("Objeto criado a partir da classe CMensagem"); 

     gerarEvento.fire(evento); 
    } 
} 

這種情況也會發生套餐:

import javax.enterprise.inject.Alternative; 
import javax.decorator.Decorator; 
import javax.decorator.Delegate; 
import javax.enterprise.inject.Disposes; 
import javax.enterprise.inject.Produces; 
import javax.enterprise.inject.spi.InjectionPoint; 

如果我改變服務器爲GlassFish 4.0相同的代碼運行正常,所有的包都正確導入。

我在NetBeans和Glassfish論壇搜索,但我沒有發現任何像這樣的情況。

預先感謝任何可能幫助我解決這種情況的消息。

回答

3

Glassfish 4.1將其CDI版本更新爲1.2(Glassfish 4.0使用CDI 1.1)。當你不給你的應用程序是如何打包的信息,我給你所有的點進行檢查:

  1. 檢查沒有cdi-api.jar文件在你的戰爭

  2. 檢查你在戰爭中沒有任何相關的罐子

  3. 使用CDI Api 1.2版來編譯你的代碼。檢查的site spec下載文件或更改你的Maven配置這樣


<dependency> 
    <groupId>javax.enterprise</groupId> 
    <artifactId>cdi-api</artifactId> 
    <version>1.2</version> 
    <scope>provided</scope> 
</dependency> 

有1.1和1.2,但所有的OSGi配置之間的API沒有變化已經改變了這樣您可能會遇到這些更改的問題。

+0

cdi-api.jar不在Glassfish 4.1的jar文件中。我手動將它添加到Netbeans的Libraries部分,並且應用程序編譯並正常工作。我只有一個焊接文件「weld-osgi-bundle.jar」,它也存在於Glassfish 4.0中,但在GF 4.1中它更小。非常感謝:) – javlacerda 2014-09-24 16:22:54

+0

我在最新的GlassFish 4.1版本的glassfish/modules目錄中發現了cd-api.jar,所以我假設我不需要將它與我的應用程序捆綁在一起。但是如果沒有在NetBeans 8.0.2項目中將.jar明確添加到編譯庫中,我仍然無法編譯我的應用程序。我不知道這個庫在編譯器的作用域內有多大的魔力,所以我只需要在更新的時候嘗試把它取出(什麼?)。此外,看起來如果我取消選中庫列表中該jar的Package列,它將不會被包含在.war文件中,我相信我想避免它。 – 2015-01-16 19:08:24

4

使用NetBeans 8.0.x時,只需打開Project Properties,然後轉到Libraries部分並添加「Java EE Web API API庫」。 從NetBeans 7.4遷移到8.0時遇到同樣的問題,但解決方案非常簡單明瞭。