如何摆脱最新的 Eclipse (2021-03) of MANIFEST.MF (No such file or directory) 错误?

问题描述

在过去几年中,对于 Eclipse 中的父 POM 项目,我不得不对 Eclipse 的配置进行稍微不同的调整,以避免 Eclipse 出现如下错误

...target/classes/meta-inf/MANIFEST.MF (No such file or directory)  pom.xml

我知道我可以手动消除这些错误方法是右键单击父项目并执行

Maven > Update Project

但这仅在我进行另一次“全新安装”时才有效。

过去,我通过对 Eclipse 进行以下 2 项调整让 Eclipse 停止抱怨:

Preferences > Maven > check "Automatically update Maven projects configuration (experimental)"
Preferences > Maven > Java EE Integration > uncheck "Maven Archiver generates files under the build directory".

但是,这不再适用于最新版本的 Eclipse(例如,版本:2021-03)。

为什么 Eclipse 会这样做,我如何才能一劳永逸地摆脱这种烦恼?

解决方法

我找到了解决方案。

该问题是由标准的 maven-compiler-plugin 引起的。当它生成一个 JAR 文件时,它会删除 target/classes/META-INF/MANIFEST.MF。 最终(但不是马上),Eclipse 注意到了这一点并抱怨清单文件丢失。

清理项目(如相关 Stack Overflow 问题中经常推荐的那样)不是解决方案。虽然暂时让错误消失了,但是错误很快又回来了,下次maven-compiler-plugin再生成一个JAR文件。

一个永久的解决方案是将这个额外的插件包含在我的 POM 中,它不仅生成一个清单文件,而且将它保存在 target/classes/META-INF/MANIFEST.MF:

...
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>3.3.0</version>
            <executions>
                <execution>
                    <id>bundle-manifest</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>manifest</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <archive>
                    <index>true</index>
                    <manifest>
                        <addDefaultSpecificationEntries>false</addDefaultSpecificationEntries>
                        <addDefaultImplementationEntries>false</addDefaultImplementationEntries>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            ...
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            ...
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            ...
        </plugin>
    </plugins>
    ...
</build>
...