我正在学习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<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论坛中搜索过,但我没有发现像这样的情况.
提前感谢任何可能帮助我解决这种情况的消化.
解决方法:
Glassfish 4.1将其CDI版本更新为1.2(Glassfish 4.0使用CDI 1.1).由于您没有提供有关应用程序打包方式的信息,因此我将为您提供所有要检查的要点:
>检查你的战争中没有cdi-api.jar文件
>检查你的战争中没有任何焊接相关的罐子
>使用CDI Api 1.2版编译代码.检查site
spec以下载文件或更改您的Maven配置
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.2</version>
<scope>provided</scope>
</dependency>
API在1.1和1.2之间没有变化,但所有OSGi配置都已更改,因此您可能会遇到这些更改的问题.