发布Mule JSON Logger到Anypoint Exchange时Java构建失败求助
问题:Mule JSON Logger发布到Anypoint Exchange时Java构建失败
我正尝试基于json-logger仓库将Mule JSON Logger发布到Anypoint Exchange,提供ORG ID并执行deploy-to-exchange.sh脚本后,持续遇到Java构建失败,堆栈跟踪如下:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. [WARNING] diagnostic: warning: Supported source version 'RELEASE_8' from annotation processor 'org.mule.runtime.ast.internal.extension.loader.ASTExtensionResourcesGeneratorAnnotationProcessor' less than -source '20' [INFO] diagnostic: Note: Starting Resources generator for Extensions [ERROR] error on execute: use -X to have details [DEBUG] java.lang.RuntimeException: java.lang.ExceptionInInitializerError at com.sun.tools.javac.api.JavacTaskImpl.invocationHelper (JavacTaskImpl.java:168) at com.sun.tools.javac.api.JavacTaskImpl.doCall (JavacTaskImpl.java:100) at com.sun.tools.javac.api.JavacTaskImpl.call (JavacTaskImpl.java:94) at org.bsc.maven.plugin.processor.AbstractAnnotationProcessorMojo.executeWithExceptionsHandled (AbstractAnnotationProcessorMojo.java:778) at org.bsc.maven.plugin.processor.AbstractAnnotationProcessorMojo.execute (AbstractAnnotationProcessorMojo.java:429) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126) at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:342) at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:330) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:213) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:175) at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:76) at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:163) at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:160) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173) at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101) at org.apache.maven.cli.MavenCli.execute (MavenCli.java:827) at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:272) at org.apache.maven.cli.MavenCli.main (MavenCli.java:195) at jdk.internal.reflect.DirectMethodHandleAccessor.invoke ..........
我机器上安装了JDK 20,之前用JDK 8时也遇到相同错误,请问是什么原因?
分析与解决方案
可能原因
- JDK版本不兼容:日志明确显示Mule的注解处理器仅支持JDK 8,但构建时实际使用的是JDK 20;切换JDK 8后仍报错,大概率是Maven环境未正确切换JDK版本,或者项目pom.xml中的JDK配置存在冲突。
- SLF4J绑定缺失:SLF4J警告无法加载
StaticLoggerBinder,虽为警告,但可能导致注解处理器初始化异常,引发构建失败。 - Maven注解处理器插件不兼容:注解处理器执行时抛出
ExceptionInInitializerError,可能是插件版本与Mule运行时的注解处理器不匹配。
解决步骤
强制指定JDK 8构建
- 确保
JAVA_HOME环境变量指向JDK 8目录,且PATH优先使用该JDK的bin目录 - 在项目pom.xml中明确配置JDK版本:
<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.release>8</maven.compiler.release> </properties>
- 确保
补充SLF4J绑定依赖
在pom.xml中添加SLF4J的简单实现依赖:<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.36</version> <scope>provided</scope> </dependency>更新Maven注解处理器插件
检查项目中maven-processor-plugin的版本,升级到兼容版本(如4.5):<plugin> <groupId>org.bsc.maven</groupId> <artifactId>maven-processor-plugin</artifactId> <version>4.5</version> <!-- 保留原有插件配置 --> </plugin>清理Maven缓存
执行命令强制更新依赖并清理缓存:mvn clean install -U
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

