无法在Eclipse中解析CDI导入

时间:2014-11-26 11:48:58

标签: eclipse glassfish cdi

我已经使用CDI作为jsf的支持bean在我的电脑上编写了一个应用程序,该应用程序完全正常。

现在我在新电脑上安装了一切,安装了glassfish 4.1,通过将安装的jre作为jdk7从glassfish文件夹中设置eclipse kepler。

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

现在我尝试从我的电脑上取下项目并将其导入新电脑。新PC上的eclipse不会识别import javax.enterprise.context.SessionScoped;给出编译器错误,指出此注释不可用。

  

导入javax.enterprise.context无法解析

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

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

enter image description here

3 个答案:

答案 0 :(得分:1)

Eclipse没有导入所有glassfish jar,所以你需要: 右键单击项目名称,构建路径,配置构建路径,在“库”下单击“添加外部JAR”,转到已解压缩Glassfish的位置并导入存在于以下位置的所有jar: glassfish4 \的glassfish \模块 和所有子目录两个,比如endoresed。

这将解决CDI和其他JAX-RS

的问题

答案 1 :(得分:0)

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

这就是人们喜欢maven或gradle等构建工具的原因,你可以选择并重新导入项目;它会为你解决所有依赖关系。

答案 2 :(得分:0)

您是否恰巧使用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的modules文件夹中了。

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