Maven解决Failed to instantiate SLF4J LoggerFactory报错

pom.xml文件中添加下面的依赖(二选一即可)

方法一:添加依赖

参考网站:https://blog.csdn.net/qq_35923749/article/details/76735191

        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.6.6</version>
            <scope>test</scope>
        </dependency>

方法二:添加依赖

参考网站:http://www.slf4j.org/codes.html#unsuccessfulInit

<dependency>
    <groupId> org.apache.cassandra</groupId>
    <artifactId>cassandra-all</artifactId>
    <version>0.8.1</version>

    <exclusions>
      <exclusion> 
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
      </exclusion>
      <exclusion> 
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
      </exclusion>
    </exclusions> 
</dependency>
SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/Users/hujiangteng/Documents/workdata/xdf/repository/org/slf4j/slf4j-log4j12/1.7.5/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/Users/hujiangteng/Documents/workdata/xdf/repository/ch/qos/logback/logback-classic/1.2.6/logback-classic-1.2.6.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] Exception in thread "main" java.lang.IllegalArgumentException: Cannot instantiate interface org.springframework.context.ApplicationListener : org.springframework.boot.context.config.ConfigFileApplicationListener at org.springframework.boot.SpringApplication.createSpringFactoriesInstances(SpringApplication.java:438) at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:420) at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:413) at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:270) at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:250) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1214) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1203) at com.koolearn.old.manageorder.ApplicationStarter.main(ApplicationStarter.java:33) Caused by: java.lang.NoClassDefFoundError: org/springframework/core/ResolvableType at org.springframework.boot.context.properties.bind.Bindable.of(Bindable.java:202) at org.springframework.boot.context.config.ConfigFileApplicationListener.<clinit>(ConfigFileApplicationListener.java:116) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingCon
最新发布
03-21
<think>好的,我现在需要处理用户的问题:“Unable to start web server; nested exception is java.lang.ExceptionInInitializerError”。用户之前问过类似的问题,关于反射访问模块导致的错误,现在这个错误看起来也是启动Web服务器时的初始化异常。首先,我要理解这个错误的原因。 用户可能是在启动Spring Boot应用或者其他Java Web应用时遇到了这个问题。ExceptionInInitializerError通常表示在类的静态初始化过程中出现了错误,可能是静态块或静态变量初始化时抛出了异常。而根本原因可能有很多种,比如依赖冲突、配置错误、资源缺失等。 首先,我需要回忆之前用户的问题,他们之前遇到的错误是关于模块系统的,可能需要检查是否有类似的模块访问问题,尤其是在Java 9+中。但现在的错误更广泛,可能不限于模块系统。我需要分步骤分析可能的原因,并提供解决方案。 接下来,我需要考虑常见的导致ExceptionInInitializerError的原因。比如: 1. 静态初始化代码中的异常:比如静态块里读写文件、连接数据库失败,或者初始化静态变量时出现空指针等。 2. 依赖冲突:不同版本的库导致类加载问题。 3. 缺少依赖:某个必需的类或资源不存在。 4. 环境配置问题:比如数据库连接配置错误,端口被占用等。 5. 资源文件缺失:比如配置文件未正确放置,导致应用启动时读取失败。 6. 日志框架初始化失败:比如Log4j或Logback配置错误。 7. Java版本不兼容:项目使用的Java版本与依赖库不兼容。 8. 模块系统问题:像之前提到的,某些库需要访问内部模块但未正确配置。 然后,我需要将这些可能的原因转化为结构化的解答,帮助用户一步步排查。需要建议用户查看完整的堆栈跟踪,找到具体的根本原因,因为ExceptionInInitializerError通常是其他异常的结果。 另外,用户可能不太熟悉如何查看详细日志,可能需要指导他们如何启用调试日志或查看异常堆栈。例如,在Spring Boot中,可以通过设置日志级别为DEBUG来获取更多信息。 还需要考虑用户的环境,比如是否使用了特定的框架(如Spring Boot)、构建工具(如Maven或Gradle),或者应用服务器(如Tomcat)。不同的环境可能需要不同的解决方案。 此外,要提醒用户检查最近是否有变更,比如添加了新依赖、更新了库版本,或者修改了配置文件。这些变更可能引入了问题。 最后,可能需要提供一些具体的命令或配置示例,比如如何检查依赖冲突,如何添加JVM参数解决模块访问问题,或者如何配置日志。同时,要强调如果问题依旧,提供更多上下文或日志会更有助于诊断。</think>--- ### **错误解释** `Unable to start web server; nested exception is java.lang.ExceptionInInitializerError` 表示在启动Web服务器(如Spring Boot的Tomcat)时,某个类的静态初始化代码(如静态块、静态变量初始化)抛出了未处理的异常,导致服务器启动失败。以下是分步排查和解决方案: --- ### **1. 定位根本原因** 首先检查完整的异常堆栈,找到`Caused by:`后的具体错误(如`NullPointerException`、`ClassNotFoundException`等)。 **关键命令**: ```bash # 启用详细日志(Spring Boot) java -jar your-app.jar --debug ``` --- ### **2. 常见原因及解决方案** #### **场景1:静态初始化代码异常** - **表现**:静态块(`static {}`)或静态变量初始化失败。 - **案例**: ```java public class Config { static { String value = null; System.out.println(value.length()); // 抛出NullPointerException } } ``` - **解决**: 检查代码中所有静态初始化逻辑,修复空指针、资源加载失败等问题。 --- #### **场景2:依赖冲突或缺失** - **表现**:`NoClassDefFoundError`或`NoSuchMethodError`,通常由依赖版本不兼容引起。 - **解决**: 1. **Maven项目**: ```bash mvn dependency:tree > dependencies.txt ``` 检查输出文件,排除重复或冲突的依赖。 2. **Gradle项目**: ```bash gradle dependencies > dependencies.txt ``` 3. 更新依赖到兼容版本,或手动排除冲突库(如旧版`commons-logging`)。 --- #### **场景3:资源文件缺失** - **表现**:配置文件(如`application.yml`、`logback.xml`)未正确加载。 - **案例**: ```java public class AppConfig { static String KEY = Files.readString(Path.of("missing-file.txt")); // 抛出IOException } ``` - **解决**: 确保资源文件位于正确路径(如`src/main/resources`)且未被过滤。 --- #### **场景4:日志框架初始化失败** - **表现**:`Logback`/`Log4j`报错,如`Failed to instantiate SLF4J LoggerFactory`。 - **解决**: 1. 检查日志配置文件(如`logback.xml`)语法。 2. 排除冲突的日志依赖(如同时引入`log4j`和`logback`)。 3. 添加默认日志配置: ```properties # application.properties logging.level.root=INFO ``` --- #### **场景5:端口被占用** - **表现**:`Web server failed to start. Port 8080 was already in use`。 - **解决**: 1. 终止占用端口的进程: ```bash # Linux/macOS lsof -i :8080 kill -9 <PID> # Windows netstat -ano | findstr :8080 taskkill /F /PID <PID> ``` 2. 修改应用端口: ```properties # application.properties server.port=8081 ``` --- #### **场景6:模块系统限制(Java 9+)** - **表现**:`Illegal reflective access`或`module not opened`错误。 - **解决**: 添加JVM参数允许模块访问(常见于反射操作JDK内部API的库): ```bash java --add-opens java.base/java.lang=ALL-UNNAMED -jar your-app.jar ``` --- ### **3. 通用排查流程** 1. **检查日志**:定位`Caused by`后的具体异常。 2. **简化代码**:逐步移除依赖和功能,定位问题模块。 3. **隔离环境**:尝试在干净环境中运行(如Docker容器)。 4. **版本检查**:确保Java版本、框架版本、依赖库兼容。 --- ### **示例解决方案** ```bash # 修复日志配置 + 允许模块访问 + 指定端口 java --add-opens java.base/java.lang=ALL-UNNAMED -jar app.jar --server.port=8081 --debug ``` 如果问题仍未解决,请提供完整的异常堆栈和项目依赖信息(如`pom.xml`片段)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值