如何摆脱最新 Eclipse (2021-03) 的 MANIFEST.MF (No such file or directory) 错误?
How to rid latest Eclipse (2021-03) of MANIFEST.MF (No such file or directory) error?
在过去的几年里,对于我们在 Eclipse 中的父 POM 项目,我不得不对 Eclipse 的配置进行稍微不同的调整,以避免 Eclipse 出现如下错误:
...target/classes/META-INF/MANIFEST.MF (No such file or directory) pom.xml
我知道我可以通过右键单击父项目并执行
来手动消除这些错误
Maven > Update Project
但这只在我执行另一个“全新安装”时的下一个构建之前有效。
过去,我通过进行以下 2 个 Eclipse 调整让 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 问题中经常推荐)不是解决方案。虽然它使错误暂时消失,但错误很快就会出现 return,下次 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>
...
在过去的几年里,对于我们在 Eclipse 中的父 POM 项目,我不得不对 Eclipse 的配置进行稍微不同的调整,以避免 Eclipse 出现如下错误:
...target/classes/META-INF/MANIFEST.MF (No such file or directory) pom.xml
我知道我可以通过右键单击父项目并执行
来手动消除这些错误Maven > Update Project
但这只在我执行另一个“全新安装”时的下一个构建之前有效。
过去,我通过进行以下 2 个 Eclipse 调整让 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 问题中经常推荐)不是解决方案。虽然它使错误暂时消失,但错误很快就会出现 return,下次 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>
...