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

时间:2014-09-21 22:23:59

标签: java java-ee netbeans glassfish cdi

我正在学习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论坛中搜索过,但我没有发现像这样的情况。

提前感谢任何有助于我解决这种情况的消化方法。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

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

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

  2. 检查你的战争中是否还有weld相关的jar

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


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

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