【问题标题】:Package does not exist after upgrading to Netbeans 8.0.1 and Glassfish 4,1升级到 Netbeans 8.0.1 和 Glassfish 4,1 后包不存在
【发布时间】:2014-09-21 22:23:59
【问题描述】:

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

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

【问题讨论】:

    标签: java jakarta-ee netbeans glassfish cdi


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

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


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

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

      【讨论】:

      • cdi-api.jar 不在 Glassfish 4.1 的 jar 文件中。我将它手动添加到 Netbeans 的库部分,应用程序编译并正常工作。我只有一个焊接文件“weld-osgi-bundle.jar”,它也存在于 Glassfish 4.0 中,但在 GF 4.1 中它更小。非常感谢:)
      • 我在最新 GlassFish 4.1 版本的 glassfish/modules 目录中找到了 cd-api.jar,所以我假设我不需要将它与我的应用程序捆绑在一起。但是如果不将该 .jar 显式添加到我的 NetBeans 8.0.2 项目的编译库中,我仍然无法编译我的应用程序。我不知道这个库有什么魔力应该在编译器的范围内,所以我只需要在我更新的任何时候尝试将它取出(什么?)。此外,如果我在库列表中取消选中该 jar 的 Package 列,它似乎不会包含在 .war 文件中,我相信我想避免这种情况。
      猜你喜欢
      • 1970-01-01
      • 2015-01-10
      • 2021-09-13
      • 2014-11-17
      • 2015-10-26
      • 2016-11-06
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      相关资源
      最近更新 更多