我已经使用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发布它,它会给我未解决的编译错误
答案 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上,至少是我使用的。