Gradle如何配置Main Manifest属性解决可执行jar找不到主类问题
可执行Jar包找不到主类问题解决方案
核心配置规则(Manifest.MF强制要求)
Main-Class取值仅需填写主类全限定名,禁止加.class后缀:如主类在com.example包下,正确写法为Main-Class: com.example.Main,你尝试的<包名>.Main.class写法本身不符合规范- 配置行冒号后必须紧跟1个空格:
Main-Class:Main属于错误写法,空格不可省略 - 整个Manifest文件末尾必须保留1个空行,否则所有配置不会被JVM识别,这是绝大多数配置不生效的隐藏原因
必做排查步骤
- 解压生成的jar包,首先查看
META-INF/MANIFEST.MF文件,确认配置符合上述规则 - 检查jar包内目录结构与主类包路径是否匹配:如主类全限定名为
com.example.Main,jar包根目录下必须存在com/example/Main.class文件,打包时若误将源码目录、模块名打包进根目录导致路径错位,会直接触发找不到主类错误 - 确认主类存在符合规范的main方法:签名必须为
public static void main(String[] args),缺少任一修饰符都会被判定为非法主类
常见打包工具的正确配置示例
Maven(maven-jar-plugin)
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.2.2</version> <configuration> <archive> <manifest> <mainClass>com.example.Main</mainClass> </manifest> </archive> </configuration> </plugin>
Gradle
jar { manifest { attributes 'Main-Class': 'com.example.Main' } }
IDEA 手动打包
- 依次打开
File -> Project Structure -> Artifacts - 点击+号选择
JAR -> From modules with dependencies - 主类选择直接点击右侧文件夹图标选中对应Main类,无需手动输入
- 构建完成后按上述排查步骤校验配置即可
内容的提问来源于stack exchange,提问作者Zachbutwithak
相关产品推荐
相关产品推荐

