WFLYEE0040:此模块中已定义名为“...”的组件

问题描述 投票:0回答:5

我在 Java Maven 项目中收到此错误。奇怪的是,它并没有出现在每台机器上,所以我认为它与配置问题有关。

RoleKeyCacheImpl 类是一个@Startup @Singleton:

@Startup
@Singleton
public class RoleKeyCacheImpl implements RoleKeyCache { ... }

这是 Wildfly 在部署服务时触发的错误。

引起:java.lang.IllegalArgumentException:WFLYEE0040:组件 名为“RoleKeyCacheImpl”的模块已在以下位置定义: org.jboss.as.ee.component.EEModuleDescription.addComponent(EEModuleDescription.java:167) 在 org.jboss.as.ejb3.deployment.processors.EJBComponentDescriptionFactory.addComponent(EJBComponentDescriptionFactory.java:58)

我已经尝试过:

  • 在同一台计算机上安装新的 Wildfly(V10、V13)-> 没有帮助
  • 在这台机器上安装全新的 Eclipse -> 没有帮助
  • 清理和重建所有相关项目
  • 确保部署文件夹为空并且不包含同一 WAR 的旧版本
  • 在这里阅读相关问题,这也没有帮助(他们使用Spring):在 JBoss 7.1.1 的这个模块中已经定义了名为“XXX”的组件
  • 阅读并尝试了此问答:JBoss Wildfly 中与 EJB 的错误依赖关系(服务器清理)-> 没有帮助
  • 删除并重建本地 Maven 代表(“.m2”)-> 没有效果

  • 在另一台计算机上检查相同的源 -> 在一台计算机上确实有效,在另一台计算机上却给出了相同的错误

我完全不知道问题是什么,甚至不知道问题是什么。在一台机器上,我们检查它,它运行没有错误。在其他情况下,也会发生完全相同的错误。

有人有想法吗?

java jboss wildfly
5个回答
4
投票

我在 EAP 7.1 中多次遇到同样的问题,现在在 WildFly 21.0.0 中又遇到了同样的问题。根据经验,我知道这是由 Eclipse 尝试自动部署到已配置的 WildFly 实例引起的问题。在部署(或取消部署)过程中,会出现一些并发文件问题,并且应删除的文件仍在文件系统上,从而导致组件已定义的错误。

事实上它还没有定义,只是 WildFly 感到困惑,因为它在他的临时目录中找到了一些不应该存在的旧文件并引用了完全相同的组件。

解决方案:删除WildFly独立目录中'deployments'目录和'tmp'目录中的内容。请放心,所有内容都可以安全删除。重新启动,错误消息就会消失;-)


1
投票

您应该注意,在同一模块中的两个同名类之上不要有两个

@Stateless
EJB 注释。 您可以通过使用注释中的
name
属性来区分它们,并在每个类中放置不同的值


0
投票

看起来该类已经存在。检查是否确实如此...您可能必须重写 EEModuleDescription 的该部分以使用其自己的私有方法(这将是您要编写的),而不是覆盖 RoleKeyCacheImpl 中的方法。如果该类实际上不存在,则右键单击该项目 -> Maven 2 Tools -> 生成 Eclipse Artifacts(检查更新)。这将重新生成项目使用的所有依赖项。另请确保您没有错误地将任何新项目添加到类路径中,因为这也可能导致此错误。


0
投票

我今天刚遇到这个问题,当时一位同事添加了 Maven 依赖项。 事实证明,这个依赖项是一个在清单中带有令人讨厌的类路径条目或“../”的 jar。 我使用 7-zip 编辑了缓存在本地 Maven 存储库中的 jar 的 manifest.mf,并删除了“../”类路径条目。 然后重新打包我的war文件(maven clean install)并且宾果游戏,它起作用了!

就我而言,这是由 org.libreoffice jurt 版本 5.4.2 引起的(但我检查的其他版本也有类路径问题)。

不幸的是,我很幸运我们将其确定为依赖项,YMMV!


0
投票

mvn 全新安装 这对我有用

© www.soinside.com 2019 - 2024. All rights reserved.