Mule 4.9使用Log4j JMS Appender对接ActiveMQ时的javax与jakarta JMS包冲突问题求助
Mule 4.9使用Log4j JMS Appender对接ActiveMQ时的javax与jakarta JMS包冲突问题求助
我刚接触Mule,最近在尝试用Log4j的JMS Appender把日志推送到ActiveMQ队列,过程中碰到了包依赖的棘手问题,想请大家帮忙看看!
之前在Mule 4.3的情况
一开始在Mule 4.3版本配置JMS Appender时,直接报了错误:
2025-06-05T07:02:25.588889200Z WrapperListener_start_runner ERROR Could not create plugin of type class org.apache.logging.log4j.core.appender.mom.JmsAppender for element JMS: java.lang.NoClassDefFoundError: javax/jms/JMSException java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 2025-06-05T07:02:25.590884400Z WrapperListener_start_runner ERROR Unable to invoke factory method in class org.apache.logging.log4j.core.appender.mom.JmsAppender for element JMS: java.lang.IllegalStateException: No factory method found for class org.apache.logging.log4j.core.appender.mom.JmsAppender java.lang.IllegalStateException: No factory method found for class org.apache.logging.log4j.core.appender.mom.JmsAppender at org.apache.logging.log4j.core@2.24.2/org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.findFactoryMethod(PluginBuilder.java:268) at org.apache.logging.log4j.core@2.24.2/org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:140)
查了资料后找到了解决方法:把javax.jms-api.2.0.1.jar放到mule/lib/boot目录下,错误就消失了,功能也正常跑起来了。
升级到Mule 4.9后的新问题
结果最近把Mule版本升级到4.9之后,新的问题又来了,启动时报错:
WrapperManager: Initializing... Running Mule in testing mode java.lang.module.ResolutionException: Modules javax.jms.api and jakarta.jms.api export package javax.jms to module org.apache.maven.resolver.transport.wagon at java.base/java.lang.module.Resolver.resolveFail(Resolver.java:901) at java.base/java.lang.module.Resolver.failTwoSuppliers(Resolver.java:815) at java.base/java.lang.module.Resolver.checkExportSuppliers(Resolver.java:736)
我自己分析了下,应该是javax.jms和jakarta.jms的包都导出了同一个javax.jms包,导致模块系统冲突。但奇怪的是,我自己的项目pom.xml里并没有引入jakarta.jms的依赖,会不会是Mule 4.9的runtime自动包含了这个依赖?
现在陷入了两难:
- 如果删掉
mule/lib/boot下的javax.jms-api.2.0.1.jar,就会回到最初的NoClassDefFoundError - 但保留这个jar,就会触发上面的模块冲突错误
附上我当前项目的pom.xml配置:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany</groupId> <artifactId>test</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>mule-application</packaging> <name>test</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <app.runtime>4.4.0-20230320</app.runtime> <mule.maven.plugin.version>3.8.2</mule.maven.plugin.version> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-clean-plugin</artifactId> <version>3.2.0</version> </plugin> <plugin> <groupId>org.mule.tools.maven</groupId> <artifactId>mule-maven-plugin</artifactId> <version>${mule.maven.plugin.version}</version> <extensions>true</extensions> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.mule.connectors</groupId> <artifactId>mule-http-connector</artifactId> <version>1.7.3</version> <classifier>mule-plugin</classifier> </dependency> <dependency> <groupId>org.mule.connectors</groupId> <artifactId>mule-sockets-connector</artifactId> <version>1.2.3</version> <classifier>mule-plugin</classifier> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.16.0</version> </dependency> </dependencies> <repositories> <repository> <id>anypoint-exchange-v3</id> <name>Anypoint Exchange</name> <url>https://maven.anypoint.mulesoft.com/api/v3/maven</url> <layout>default</layout> </repository> <repository> <id>mulesoft-releases</id> <name>MuleSoft Releases Repository</name> </repository> </repositories> </project>
有没有朋友碰到过类似的问题?或者知道怎么解决Mule 4.9下Log4j JMS Appender和ActiveMQ的依赖冲突问题?
内容来源于stack exchange
相关产品推荐
相关产品推荐

