You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 17:12:52