CentOS服务器打包Spring Boot Kotlin Jar报ClassNotFoundException求助
解决CentOS服务器打包Spring Boot Kotlin项目Jar时的ClassNotFoundException问题
排查与解决步骤
1. 补全Kotlin编译插件配置
Kotlin项目必须配置kotlin-maven-plugin才能正确编译Kotlin源码,否则服务器打包时不会生成对应的class文件。在pom.xml中添加或完善以下配置:
<properties> <java.version>17</java.version> <kotlin.version>1.8.22</kotlin.version> </properties> <plugins> <!-- Kotlin编译插件 --> <plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-plugin</artifactId> <version>${kotlin.version}</version> <executions> <execution> <id>compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> <configuration> <sourceDirs> <sourceDir>${project.basedir}/src/main/kotlin</sourceDir> <sourceDir>${project.basedir}/src/main/java</sourceDir> </sourceDirs> <jvmTarget>${java.version}</jvmTarget> </configuration> </execution> <execution> <id>test-compile</id> <phase>test-compile</phase> <goals> <goal>test-compile</goal> </goals> <configuration> <sourceDirs> <sourceDir>${project.basedir}/src/test/kotlin</sourceDir> <sourceDir>${project.basedir}/src/test/java</sourceDir> </sourceDirs> <jvmTarget>${java.version}</jvmTarget> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-allopen</artifactId> <version>${kotlin.version}</version> </dependency> </dependencies> </plugin> <!-- Spring Boot Maven插件 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>3.1.1</version> <!-- 与Spring Boot版本保持一致 --> <configuration> <executable>true</executable> <mainClass>com.example.test.TestApplicationKt</mainClass> <!-- Kotlin编译后主类后缀带Kt --> </configuration> </plugin> </plugins>
2. 验证打包后的Jar内容
服务器执行mvn clean package -DskipTests打包后,用以下命令检查Jar中是否存在主类:
jar tf your-project.jar | grep com/example/test/
如果输出中没有TestApplicationKt.class或TestApplication.class,说明编译过程未生成对应类文件,需重新检查Kotlin插件配置。
3. 统一Java版本环境
本地用Java 17、服务器用Java 20的版本差异可能导致字节码兼容性问题,建议:
- 在服务器上安装Java 17并切换为默认JDK
- 或在pom.xml中强制指定编译的Java版本:
<properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> </properties>
4. 确认打包方式与Jar类型
确保使用Spring Boot的fat jar打包,直接执行java -jar your-project.jar启动即可。Spring Boot插件默认会生成包含所有依赖的可执行fat jar,无需额外配置类路径。
5. 移除不必要的Lombok排除配置
若项目依赖Lombok,删除pom.xml中spring-boot-maven-plugin里的Lombok排除配置,避免影响编译时Lombok注解的处理。
内容的提问来源于stack exchange,提问作者randynetworks
相关产品推荐
相关产品推荐

