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

IntelliJ项目导出可执行Jar文件后无法找到主类及依赖库访问异常问题求助

解决IntelliJ导出可执行Jar找不到主类且依赖丢失的问题

我之前也踩过一模一样的坑!这大概率是打包时的配置冲突或者依赖处理方式不对导致的,给你几个靠谱的解决思路:

方案1:用IntelliJ自带Artifact打包带依赖的可执行Jar

这是最直接的方式,重点是要正确配置主类和依赖处理:

  • 打开 File → Project Structure(快捷键 Ctrl+Alt+Shift+S)
  • 左侧菜单栏选择 Artifacts,点击顶部的 + 号 → JAR → From modules with dependencies
  • 在弹出的窗口中,务必选中你的主类(就是包含public static void main(String[] args)方法的类),然后选择依赖的打包方式:
    • 选 Extract to the target JAR:所有依赖会被解压合并到最终的Jar里,生成一个独立的可执行Jar
    • 选 Copy to the output directory and link via manifest:依赖会被复制到Jar旁边的lib目录,Manifest文件里会自动添加Class-Path指向这些依赖
  • 切换到 Output Layout 标签,检查所有依赖是否都被包含,同时可以右键选中依赖Jar,选择 Extract 后,排除掉依赖Jar里META-INF下的.SF、.DSA、.RSA这类签名文件(这些文件容易导致Manifest冲突,就是你之前删META-INF其他文件能启动的原因)
  • 最后点击 Build → Build Artifacts,选择你的Artifact点击Build,生成的Jar就能正常运行了

方案2:用构建工具(Maven/Gradle)打包更可靠

如果你的项目用了Maven或Gradle,用构建工具打包会避免很多IntelliJ手动配置的问题:

Maven配置

在pom.xml中添加maven-assembly-plugin插件,指定主类和打包带依赖的Jar:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.3.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <!-- 替换成你的主类完整路径 -->
                        <mainClass>com.yourpackage.YourMainClass</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

然后运行命令:mvn clean package,target目录下会生成带-jar-with-dependencies后缀的可执行Jar。

Gradle配置

在build.gradle中添加Jar打包配置:

plugins {
    id 'java'
}

jar {
    manifest {
        // 替换成你的主类完整路径
        attributes 'Main-Class': 'com.yourpackage.YourMainClass'
    }
    // 把依赖打包进Jar
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
    // 排除签名文件避免冲突
    exclude 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA'
}

运行命令:gradle clean build,build/libs目录下的Jar就是可执行的。

关键排查步骤

如果还是有问题,可以做以下检查:

  • 打开生成的Jar,查看META-INF/MANIFEST.MF文件,确认Main-Class属性的类路径完全正确(包名+类名,没有拼写错误)
  • 如果是依赖分离的打包方式,检查Class-Path是否正确指向依赖Jar的位置,比如依赖在lib目录下,路径应该是lib/dependency1.jar lib/dependency2.jar
  • 确认主类确实存在于Jar的对应目录下,没有打包时遗漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:42:38