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
相关产品推荐
相关产品推荐

