您的位置:

Maven打包没有主清单属性的解析

一、什么是maven打包没有主清单属性

每一个Java程序在加载时都需要一个清单文件(manifest),用于描述打包文件的一些基本信息。而这个清单文件被命名为主清单文件(META-INF/MANIFEST.MF),是Java世界中非常重要的一个文件。一般情况下,当我们使用maven构建Java项目时,maven会默认自动生成这个主清单文件。但是有时候在打包时,会遇到没有主清单属性的问题。

二、为什么会出现没有主清单属性的问题

通常,maven使用maven-jar-plugin这个插件来打包项目,生成Jar文件,maven-jar-plugin指定了META-INF/MANIFEST.MF这个清单文件的存放位置,但是当没有自定义的配置不当或该文件被意外删除时,maven就会生成不带主清单属性的jar包,也就是不存在"Manifest-Version"这一属性。

三、如何解决没有主清单属性的问题

解决没有主清单属性的问题有以下几种方式:

1、更新maven-jar-plugin插件的版本

由于maven-jar-plugin插件的版本不同,它的默认行为也不同。一些较新版本的插件,例如3.0.0以上的版本,会自动添加指定的清单属性,当然,我们也可以在pom.xml文件中指定maven-jar-plugin插件的配置参数,如下所示:


<project>

    ...

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>

    ...

</project>

2、在maven的pom.xml中添加自定义的清单文件

手动创建一个MANIFEST.MF文件,文件内容需以"Manifest-Version: 1.0"开头,然后手动添加到pom.xml文件中的配置中。如下所示:


<project>

    ...

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.0.2</version>
                <configuration>
                    <archive>
                        <manifest>
                            <!-- 添加自己的清单属性 -->
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                            <!-- 指定自定义的清单 -->
                            <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>

    ...

</project>

3、手动指定清单属性

如果只想指定Manifest-Version这一属性而不是添加实现信息,可以直接在maven-jar-plugin插件的配置中指定,如下所示:


<project>

    ...

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <archive>
                        <manifestEntries>
                            <Manifest-Version>1.0</Manifest-Version>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>

    ...

</project>

四、总结

在maven进行Java项目打包时,遇到没有主清单属性的问题时,主要有三种解决方式,分别是更新maven-jar-plugin插件的版本、在maven的pom.xml中添加自定义的清单文件、手动指定清单属性。通过本文的介绍,相信读者已经对maven打包没有主清单属性的问题有了一个清晰的认识,可以灵活应对这个问题了。