Maven 在尝试定义模块时不会将 EJB 识别为项目的依赖项
今天,我将本地 Glassfish 服务器升级到 3.1.1,为公司将服务器升级到相同版本做准备。我正在尝试转换我的Web服务项目以使用新服务器,并且遇到了障碍。
在我耳朵的pom文件中,我之前将webapp和ejb都列为依赖项。在webapp的pom中,我也将ejb列为依赖项。尝试将此配置部署到 Glassfish 3.1.1 时,我收到以下错误:
部署期间出错:部署应用 [ear] 时出现异常:无法解析引用 Local ejb-ref name=name,Local 3.x interface =interface,ejb-link=null,lookup=,mappedName=,jndi-name=,refType=Session,因为应用程序中有 2 个 ejb 与接口接口。一些可能的原因:1.EJB bean类被打包在一个 ear lib 库中(或者通过任何其他库机制,使库对所有组件模块都可见),这使得所有组件模块都间接包含这个 bean 类。2. EJB bean 类被打包在一个组件模块中,该模块直接或间接地通过 Manifest WEB-INF/lib 引用 EJB。EJB bean 类只应打包在声明 ejb 模块中,而不应打包在引用模块中。引用模块应仅包含 EJB 接口。请参阅服务器.log fo ....msg.seeServerLog
从本质上讲,我相信这是在说,因为我在两个不同的领域将EJB列为依赖项,因此Glassfish 3.1.1不知道要查找哪个依赖项。这在 2.1.1 中不是问题。正因为如此,我消除了耳朵中的依赖性,因为它仍然是耳朵有效pom的一部分。
但是,现在当 ear 生成应用程序.xml文件时,它会省略该文件中的所有 ejb 信息。我现在可以很好地部署应用程序,但是当我尝试运行任何东西时,我得到了关于ejbs的NameNotFoundExceptions。
我试图用标签手动将ejb模块添加到耳孔中,但是当我尝试构建项目时,我收到错误消息:
Artifact[ejb]不是项目的依赖项。
尽管当我查看耳朵的有效pom时,我可以看到ejb被列为依赖项。
如何正确生成应用程序.xml文件,同时仍然符合 Glassfish 3.1.1 更严格的规则集?
如果您需要更多信息,请告诉我,并感谢您的帮助!