首先是我项目结构的一点输入。
这是一个网店项目,由三个模块组成:
- EJB
- 远程桌面客户端
- 网络客户端
总共涉及六个 NetBeans 项目:
- 包含所有模块的主 EE 项目。
- EJB 模块项目
- Web客户端模块项目
- 远程客户端模块项目
- EJB 远程接口的类库项目
- 包含实体类“简化”形式的类的类库项目,这些实体类最初位于 EJB 模块项目中。我决定使用这些类而不是原始实体类的原因是因为在分发到远程客户端应用程序时我在序列化/反序列化它们时遇到了一些问题。
现在我将描述这些项目是如何相互联系的(通过参考上面的列表):
- EJB 项目包含对#5 和#6 的引用
- Web 客户端项目包含对 #2 的引用
- 远程客户端项目包含对#2、#5 和#6 的引用
- EJB 远程接口项目包含对#6 的引用
所以基本上,所有项目(除了 web 模块)都包含对包含简化或“封装”形式的实体类的项目的引用。
当我尝试将此 EE 应用程序(主 EE 项目)部署到 GlassFish(v 4.0)时,我不断收到此错误,即项目 #6 中定义的类在项目 #5 中不可见。项目#6 中定义了一个“产品”类,用于项目#5 的远程接口。在编写代码期间,我没有收到有关此问题的任何错误,因为引用放置正确。此外,主 EE 项目的清理和构建成功完成,但是在部署时,我仍然不断收到同样的错误:
package musicshop.entity.encapsulated does not exist
import musicshop.entity.encapsulated.Product;
注意:musicshop.entity.encapsulated
是项目#6 中包含该“产品”类的包。此外,这import musicshop.entity.encapsulated.Product;
是来自项目#5 的一个远程接口的行。
此外,值得一提的是,在我从 GlassFish 取消部署应用程序并尝试重新部署它之前,整个事情都运行良好。