升级到Netbeans 8.0.1和Glassfish 4,1后,程序包不存在

我正在学习JavaEE CDI,并且我使用NetBeans 8.0 + Glassfish 4创建了一个小应用程序。升级到NetBeans 8.0.1和Glassfish 4.1后,我收到很多错误,报告某些包不存在。 例如,我不能使用以下代码,因为我收到包javax.enterprise.event不存在的消息。

package jlacerda; import javax.inject.Inject; import javax.enterprise.event.Event; public class CMensagem { @Inject private Event 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论坛中搜索过,但我没有发现像这样的情况。

提前感谢任何可能帮助我解决这种情况的消化。

Glassfish 4.1将其CDI版本更新为1.2(Glassfish 4.0使用CDI 1.1)。 由于您没有提供有关应用程序打包方式的信息,因此我将为您提供所有要检查的要点:

  1. 检查你的战争中没有cdi-api.jar文件

  2. 检查你的战争中没有任何与weld相关的jar子

  3. 使用CDI Api 1.2版来编译代码。 检查站点规范以下载文件或更改您的Maven配置


  javax.enterprise cdi-api 1.2 provided  

API在1.1和1.2之间没有变化,但所有OSGi配置都已更改,因此您可能会遇到这些更改的问题。

使用NetBeans 8.0.x,您只需打开Project Properties,然后转到Libraries部分并添加“Java EE Web 6 API Library”。 从NetBeans 7.4迁移到8.0时,我遇到了同样的问题,但解决方案非常简单明了。