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

Kotlin+Maven打包Jar后运行提示找不到主类THEFILEKt的问题排查

解决Maven打包Kotlin/Java混合项目后运行Jar找不到主类的问题

我来帮你排查这个Error: Could not find or load main class THEFILEKt的问题,这个坑我之前也踩过,主要和Kotlin编译后的类名规则、Maven打包时的主类配置有关,咱们一步步拆解:

可能的原因

  • Kotlin编译类名规则误解:Kotlin的顶级main函数(直接写在文件里、不属于任何类的main)编译后会自动生成带Kt后缀的类,比如THEFILE.kt里的顶级main会变成THEFILEKt.class;但如果你的main函数是写在THEFILE类内部(比如用companion object包裹的@JvmStatic方法),那编译后的主类名就是THEFILE,这时候你指定THEFILEKt自然找不到。
  • Maven打包主类配置错误/缺失:即使代码编译正常,如果Maven插件没把正确的主类写入Jar包的MANIFEST.MF文件,运行时JVM找不到启动入口,就会报这个错。
  • Kotlin源码目录未被正确识别:如果kotlin-maven-plugin没配置src/main/kotlin为源码目录,Kotlin代码根本没被编译进Jar包,自然找不到主类文件。

具体解决方法

1. 先确认实际的主类名

去项目的target/classes目录下找编译后的.class文件:

  • 如果看到THEFILEKt.class,说明你的main是顶级函数,主类名就是THEFILEKt(如果有包名要加上,比如com.yourpackage.THEFILEKt);
  • 如果看到THEFILE.class,说明main在类内部,主类名是THEFILE(同样要带上包名)。

2. 修正Maven的主类配置

修改pom.xml,确保打包时把正确的主类写入MANIFEST.MF,有两种常用方式:

方式一:通过kotlin-maven-plugin配置

<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>
                <!-- 替换成你实际的主类名,别忘了包名 -->
                <mainClass>THEFILEKt</mainClass>
            </configuration>
        </execution>
        <execution>
            <id>test-compile</id>
            <phase>test-compile</phase>
            <goals>
                <goal>test-compile</goal>
            </goals>
        </execution>
    </executions>
</plugin>

方式二:通过maven-jar-plugin配置

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.3.0</version>
    <configuration>
        <archive>
            <manifest>
                <!-- 替换成正确的主类名 -->
                <mainClass>THEFILEKt</mainClass>
                <addClasspath>true</addClasspath>
            </manifest>
        </archive>
    </configuration>
</plugin>

3. 确保Kotlin源码目录被识别

如果你的pom.xml里还没明确配置Kotlin源码路径,一定要加上:

<build>
    <sourceDirectory>src/main/java</sourceDirectory>
    <testSourceDirectory>src/test/java</testSourceDirectory>
    <plugins>
        <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>
                    </configuration>
                </execution>
                <!-- 测试编译配置可以保留 -->
            </executions>
        </plugin>
    </plugins>
</build>

4. 重新打包测试

执行mvn clean package后,去target目录找到你的Jar包,运行:

java -jar your-project-name.jar

如果还是有问题,可以解压Jar包,查看META-INF/MANIFEST.MF里的Main-Class属性是否正确,同时检查Jar内的class文件是否存在。


内容的提问来源于stack exchange,提问作者Deividas Duda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:04:24