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

时间:2018-12-20 08:01:42

标签: java jboss wildfly

我在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->没有帮助
  • 清理和重建所有相关项目
  • 确保Deployments-folder为空且不包含同一WAR的旧版本
  • 在此处阅读相关问题,该问题也无济于事(使用Spring):A component named 'XXX' is already defined in this module in JBoss 7.1.1
  • 阅读并尝试以下问答:Wrong dependencies with EJB in JBoss Wildfly(服务器清理)->没有帮助
  • 删除并重建了本地Maven rep(“ .m2”)->无效

  • 在另一台计算机上检出相同的源->确实在一台计算机上工作,在另一台计算机上却发出相同的错误

我完全不知道问题是什么甚至可能是什么。在一台机器上,我们将其检出,它可以正常运行。在其他情况下,会发生完全相同的错误。

有人有想法吗?

3 个答案:

答案 0 :(得分:1)

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

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

解决方案:在WildFly独立目录中删除“部署”目录和“ tmp”目录中的内容。放心,所有可以安全删除的东西都可以。重新启动,错误消息将消失;-)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

今天,当一位同事添加了一个maven依赖项时,我就遇到了这个问题。 原来,这种依赖性是一个带有讨厌的类路径条目或清单中的“ ../”的jar。 我编辑了使用7-zip缓存在本地maven存储库中的jar的manifest.mf,并删除了“ ../”类路径条目。 然后重新打包我的war文件(maven全新安装)和bingo,就可以了!

在我的情况下,这是由org.libreoffice jurt版本5.4.2引起的(但我检查的其他版本也具有类路径的混乱性)。

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