关于运行jar时,报“没有主清单属性”的问题
errol发表于2023-10-05 04:20:47 | 分类为 编程 | 标签为java打包没有主清单属性MANIFEST.MF

主要是因为jar中“缺少MANIFEST.MF文件”或者是“MANIFEST.MF文件中未包含有主类的路径”,补充完善MANIFEST.MF文件后就能正常运行。

MANIFEST.MF的基本结构如下:

# 其他属性...
Manifest-Version: 1.0
Main-Class: com.xxx.xxx.Application

要处理这个问题也简单,在打包前后都可以进行。

1、打包前

1)spring-boot-maven-plugin插件

如果是maven项目的话,可以考虑使用spring-boot-maven-plugin(即使不是spring项目也可以),该插件可以自动在jar中生成MANIFEST.MF文件。

在pom文件中添加如下配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>3.0.11</version>
            <executions>
                <execution>
                    <id>repackage</id>
                    <configuration>
                        <attach>false</attach>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

2)手动创建MANIFEST.MF + maven-jar-plugin插件(同样是maven工程)

可以考虑先手动创建MANIFEST.MF文件(META-INF/MANIFEST.MF,其结构如开头所示),再通过maven-jar-plugin指定该文件。

如:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.2.2</version>
            <configuration>
                <archive>
                    <manifestEntries>
                        <build-time>${maven.build.timestamp}</build-time>
                    </manifestEntries>
                    <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

3)使用idea生成MANIFEST.MF文件

(此处为macos,windows应该也是类似的)

第一步:菜单栏 -> File -> Project Structure

image

第二步:Project Settings -> Artifacts -> “+”

image

第三步:JAR -> From modules with dependencies

image

第四步:填写主类以及MANIFEST.MF文件生成的位置

点击Main Class右侧的菜单图标选择主类;MANIFEST.MF文件生成的位置选择项目的src目录下即可,填写完毕后点击ok。

image

在完成了以上的操作后,打包为jar时,里面应该就含有MANIFEST.MF文件以及主类的路径了。

2、打包后(不推荐)

通过第一点也不难看出,其实MANIFEST.MF是一个很简单的配置文件,自己创建并添加至jar,或修改jar里面的MANIFEST.MF文件也是可以的。

如可以使用“360压缩”打开jar,利用360压缩不会立即解压,可以查看或修改里面的文件的特性,将MANIFEST.MF添加或修改,保存后运行即可。

但不推荐这种方式,很麻烦,每次都要修改。


刚开始接触打包java项目的时候,确实常常遇到这种问题,不过这只是个小坑,踩一遍就好。

返回