Install4J生成的应用启动失败:缺失Log4j类问题求助
问题概述
Java 17 + Spring Boot 2.7.17 + Maven 项目制作Windows安装包后,通过生成的my_app.exe启动(或作为Windows服务启动)时,提示缺失Log4j类org.apache.logging.log4j.util.Supplier,但直接运行项目jar文件时一切正常。已尝试添加相关Log4j依赖但问题未解决,执行./my_app.exe /run可复现该类缺失的堆栈错误。
可能原因
- 安装包打包时依赖遗漏:Spring Boot打包插件生成可执行exe时,未正确包含Log4j的
log4j-api包(Supplier类属于该包)。 - 依赖冲突或版本不一致:项目中存在多版本Log4j依赖,打包exe时选取了不包含该类的旧版本,而直接运行jar时使用了正确版本。
- 安装包构建工具配置问题:若用Launch4j、WinRun4J或Spring Boot自带exe打包功能,配置文件未正确指定依赖classpath,导致exe启动时找不到该类。
- 模块路径问题:Java 17模块化系统下,Log4j相关依赖未被正确添加到模块路径,exe无法加载该类。
解决办法
1. 检查并统一Log4j依赖版本
在pom.xml中明确指定与Spring Boot 2.7.17兼容的Log4j版本(Spring Boot 2.7.x默认依赖2.17.x系列),避免依赖冲突:
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.17.4</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.17.4</version> </dependency>
执行mvn dependency:tree检查依赖树,排除冲突的旧版本Log4j依赖。
2. 调整Spring Boot Maven插件配置
确保spring-boot-maven-plugin配置正确,打包时未排除Log4j相关依赖:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.7.17</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
若用spring-boot:build-image或其他插件生成exe,确认参数包含完整依赖集合。
3. 检查第三方打包工具的Classpath配置
如果用Launch4j等工具生成exe,检查配置中的classpath设置,确保包含log4j-api-x.x.x.jar和log4j-core-x.x.x.jar,且路径指向正确的依赖文件位置。
4. 验证模块化配置(若启用)
若项目使用Java模块系统(module-info.java),添加对Log4j模块的依赖:
module your.project.module { requires org.apache.logging.log4j; requires org.apache.logging.log4j.core; // 其他必要模块依赖 }
打包exe时确保模块路径包含Log4j的模块jar文件。
5. 清理缓存并重新打包
执行以下命令清理项目缓存,基于最新依赖重新构建安装包:
mvn clean install
内容的提问来源于stack exchange,提问作者Michel
相关产品推荐
相关产品推荐

