【问题标题】:CDI imports cannot be resolved in Eclipse在 Eclipse 中无法解析 CDI 导入
【发布时间】:2014-11-26 11:48:58
【问题描述】:

我在我的电脑上编写了一个应用程序,使用 CDI 作为 jsf 的支持 bean,该应用程序运行良好。

现在我在新电脑上设置了所有内容,安装了 glassfish 4.1,通过将安装的 jre 设置为 glassfish 文件夹中的 jdk7 来设置 eclipse kepler。

当我在我的电脑上为应用程序发起战争并将其部署到另一台电脑上的 glassfish 服务器上时,一切正常。

现在我尝试从我的电脑中取出项目并将其导入到新电脑上。新 pc 上的 eclipse 无法识别 import javax.enterprise.context.SessionScoped; 给出编译器错误,该注释不可用。

导入 javax.enterprise.context 无法解析

它根本不识别 javax.enterprise.context.*。像 CDI 不可用。我正在使用包含 JSR 346 的 JDK 7,所以我完全混淆了问题可能是什么。

如果我使用 war 文件直接通过 glassfish 管理控制台部署应用程序,它工作得非常好,但如果我尝试通过 eclipse 发布它,它会给我未解决的编译错误

【问题讨论】:

  • 听起来很奇怪。请将异常堆栈跟踪添加到问题中。

标签: eclipse glassfish cdi


【解决方案1】:

Eclipse 没有导入所有 glassfish 罐子,因此您需要: 右键单击项目名称,Build Path,Configure build path,在 Libraries 下单击 Add External Jars,转到您提取 Glassfish 的位置并导入所有存在的 jar: glassfish4\glassfish\模块 和所有子目录两个,就像背书一样。

这将解决 CDI 和其他类似 JAX-RS 的问题

【讨论】:

    【解决方案2】:

    如果我不得不猜测,您的 .project.classpath 文件指向特定于您的旧计算机的 JAR 位置。

    这就是为什么人们喜欢 maven 或 gradle 之类的构建工具,你可以拿起并重新导入一个项目;它会为你解决所有依赖关系。

    【讨论】:

    • 是我解决这个问题的唯一选择,如果没有构建工具就不可能做到这一点。我只是问,因为我没有使用它们的经验
    • 您可以点击“修复项目设置...”,它也会为您完成这项工作。
    【解决方案3】:

    您是否碰巧使用了 Eclipse 的 GlassFish Tools 插件?我发现 GlassFish System Libraries 类路径容器是由该插件隐式创建的,它被添加到指定 GlassFish 服务器作为其运行时的所有项目中,错过了 cdi-api.jar。这是javax.enterprise.context.* 包(以及许多其他包)所在的位置。

    所以我可以通过将cdi-api.jar 作为外部 Jar 添加到构建路径来解决此问题。之后,您可能会收到类似Classpath entry [...]/cdi-api.jar will not be exported or published. Runtime ClassNotFoundExceptions may result. 的警告,可以通过使用Exclude the associated raw classpath entry from the set of potential publish/export dependencies 的快速修复来消除该警告。显然,该 JAR 文件已包含在 GlassFish 的模块文件夹中。

    也许这个问题只发生在 GlassFish Web Profile 中,至少我是这样使用的。

    【讨论】:

      猜你喜欢
      • 2013-03-20
      • 1970-01-01
      • 1970-01-01
      • 2020-09-21
      • 2013-03-03
      • 1970-01-01
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      相关资源
      最近更新 更多