Spring项目部署AWS EC2:JAR运行报错及类加载问题求助
部署Spring+Vaadin项目到AWS EC2的问题解决办法
一、彻底解决“no main manifest attribute”错误
不要手动配置Manifest,直接用Spring Boot Maven插件生成包含正确入口的可执行Fat Jar:
- 在
pom.xml的build/plugins节点下添加Spring Boot插件配置:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>你的Spring Boot版本号</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> <configuration> <mainClass>me.shreyeschekuru.dsa.Application</mainClass> </configuration> </plugin>
- 执行打包命令:
mvn clean package - 运行target目录下不带original前缀的Jar包,这个是包含所有依赖的可执行Fat Jar,命令示例:
java -jar dsa-0.0.1-SNAPSHOT.jar
二、解决“无法找到AppShellConfigurator类”问题
这个错误是Vaadin依赖未被正确打包或加载导致的,按以下步骤排查:
- 检查
pom.xml中的Vaadin依赖,确保依赖范围不是provided(provided依赖不会被打包到Jar中,EC2环境无对应依赖):
<dependency> <groupId>com.vaadin</groupId> <artifactId>vaadin-spring-boot-starter</artifactId> <!-- 保留默认的compile范围,不要设置为provided --> </dependency>
- 确认你的
Application主类所在包能扫描到实现AppShellConfigurator的配置类,必要时添加@ComponentScan(basePackages = "你的Vaadin配置类所在包")到主类上。 - 验证Jar包中是否包含Vaadin类:执行
jar tf 你的Jar包名.jar | grep AppShellConfigurator,如果输出对应类路径,说明依赖已打包;如果无输出,重新执行mvn clean package并查看Maven日志是否有依赖打包警告。 - 确保EC2实例安装的JDK版本与本地开发环境一致(比如本地用Java 17,EC2也要安装Java 17)。
内容的提问来源于stack exchange,提问作者shreyeschekuru
相关产品推荐
相关产品推荐

