Maven 在尝试定义模块时不会将 EJB 识别为项目的依赖项

2022-09-02 03:54:39

今天,我将本地 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 更严格的规则集?

如果您需要更多信息,请告诉我,并感谢您的帮助!


答案 1

答案最终变得非常简单,我为此有点自责。在 webapp 的 pom 文件中,我只需要将作用域行添加到 ejb 依赖项中:

<dependency>
    <groupId>com.groupId</groupId>
    <artifactId>webservice-service-ejbs</artifactId>
    <version>${project.version}</version>
    <type>ejb</type>
    <scope>provided</scope>
</dependency>

有了这个,我可以将ejb依赖项保留在耳洞中,应用程序.xml正确生成,glassfish 3.1.1不会因为有多个具有相同名称的ejb类而感到困惑。

编辑:这是ejb依赖性在耳膜中的样子

<dependency>
    <groupId>com.groupId</groupId>
    <artifactId>webservice-service-ejbs</artifactId>
    <type>ejb</type>
</dependency>

感谢那些帮助我的人。


答案 2

推荐