Spring Boot Jar文件无法运行,抛出IllegalAccessException异常求助
解决Spring Boot Jar运行时
IllegalAccessException问题 这个异常的核心矛盾点很清晰:Maven直接运行正常,但打包成Jar后就报错,本质是Spring Boot的Jar加载器(MainMethodRunner)无法通过反射访问你的主类com.cafe2.user.UserApplication的main方法——哪怕你已经给main方法加了public static修饰符。结合场景来看,最常见的问题出在主类本身的访问权限上。
为什么会有这个差异?
- 用
mvn spring-boot:run直接运行时,JVM是直接调用主类的main方法,哪怕主类是包级访问权限(没有public修饰),在同一个类加载器上下文里也能正常执行。 - 但Spring Boot生成的可执行Jar是通过反射机制调用main方法的,这时候如果主类本身不是
public,JVM的访问控制规则就会阻止反射调用,抛出IllegalAccessException。
快速解决方案
1. 检查并修改主类的访问修饰符
打开你的UserApplication类,确保它被声明为public:
// ❌ 错误示例:主类无public修饰符 class UserApplication { public static void main(String[] args) { SpringApplication.run(UserApplication.class, args); } } // ✅ 正确示例:给主类添加public修饰符 public class UserApplication { public static void main(String[] args) { SpringApplication.run(UserApplication.class, args); } }
2. 重新打包并测试
修改完成后,重新执行打包命令:
mvn clean package
然后运行生成的Jar文件:
java -jar target/你的应用名称.jar
其他可能的排查方向(如果上述方法无效)
- 检查
spring-boot-maven-plugin配置,确保指定了正确的主类:<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.cafe2.user.UserApplication</mainClass> </configuration> </plugin> - 如果你用的是Java 9+模块系统,需要在
module-info.java中导出主类所在的包:module com.cafe2.user { exports com.cafe2.user; requires spring.boot; requires spring.boot.autoconfigure; }
内容的提问来源于stack exchange,提问作者emad bahrami
相关产品推荐
相关产品推荐

