如果文件格式是 rar,为什么 maven 程序集会创建清单?

Why maven assembly create manifest if file format is rar?

我有一个具有以下程序集描述符的 Maven 项目:

<assembly
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>assemby-id</id>
<formats>
    <format>rar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<files>
    <file>
        <source>${project.build.directory}/resources/file.txt</source>
        <outputDirectory>/</outputDirectory>
    </file>
</files>

如果 formatrar,我会得到一个文件夹 META-INF,其中包含 rar 清单文件。

有人可以解释为什么吗?

maven-assembly-plugin uses the maven-archiver进行包装。 maven-archiver 添加一个 MANIFEST.MF 到你的包中。

更新:

如前所述 here,您可以配置 maven-archiver-plugin 以省略 DefaultImplementationEntries:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
      <archive>
        <manifest>
          <addDefaultImplementationEntries>false</addDefaultImplementationEntries>
        </manifest>
      </archive>
    </configuration>
</plugin> 

maven-assembly-plugindoes not supportrar存档格式。引用 format 文档,支持的格式列表是:

  • "zip" - Creates a ZIP file format
  • "tar" - Creates a TAR format
  • "tar.gz" or "tgz" - Creates a gzip'd TAR format
  • "tar.bz2" or "tbz2" - Creates a bzip'd TAR format
  • "jar" - Creates a JAR format
  • "dir" - Creates an exploded directory format
  • "war" - Creates a WAR format

当归档器遇到未知格式时,默认为 jar,对于这种格式,默认创建 META-INF 目录。

因此,您创建的程序集不是有效的 RAR 文件。它实际上是一个 JAR 文件。