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



我正在学习JavaEECDI,并使用NetBeans8.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论坛上搜索了一下,但没有发现像这样的情况。

提前感谢你的任何建议,这可能会帮助我解决这个问题。

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

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

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

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

  3. 使用CDI Api的1.2版本来编译您的代码。现场检查下载文件或更改Maven配置的规范,如


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

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

相关内容

  • 没有找到相关文章

最新更新