dependencies:unpack-dependencies 目标可以解压哪些格式?

Which formats can the dependencies:unpack-dependencies goal unpack?

可以dependencies:unpack-dependencies解压哪些存档格式?例如,据我所知,它无法解压 RPM 包。是否有它支持的格式列表?有什么技巧可以让 maven 解压 RPM 包吗?

Maven 依赖插件在内部使用 Plexus Archiver 来归档和取消归档文件。从今天开始,maven-dependency-plugin depends on version 2.9 of plexus-archiver.

的 2.10 版

Plexus 组件是在 META-INF/plexus/components.xml 文件的帮助下配置的。在依赖插件的情况下,你可以看到这个文件 in the source code 并且它为以下扩展声明了 unarchiver:zipjarwarear , swc, nar, esb, sar, car, par, rar。它们都使用相同的 ZipUnArchiver 组件,这意味着它们都被提取为 ZIP 文件。

Plexus Archiver 2.9 还附带了一组预定义的解压器,它添加了:bzip2gziptartgztar.gz , tbz2, tar.bz2 到列表。最新版本还添加了 snappyxz 文件。


如果您希望能够解压自定义扩展,您将需要创建一个能够解压它的新项目并将其注册为 Plexus 组件。对于 RPM 包,您可以创建一个 rpm-archiver Maven 项目并在 META-INF/plexus/components.xml:

中包含以下内容
<component-set>
  <components>
    <component>
      <role>org.codehaus.plexus.archiver.UnArchiver</role>
      <role-hint>rpm</role-hint>
      <implementation>class.able.to.unpack.rpm.packages</implementation>
      <instantiation-strategy>per-lookup</instantiation-strategy>
    </component>
  </components>
</component-set>

其中 class.able.to.unpack.rpm.packages 是能够解压 RPM 文件的自定义 class 的完全 class 化名称。这个class必须实现接口org.codehaus.plexus.archiver.UnArchiver,但是为了简化,你可以让这个class继承自org.codehaus.plexus.archiver.AbstractUnArchiver。您需要做的就是覆盖 execute()execute(path, outputDirectory) 方法。前者需要将getSourceFile()检索到的文件解压到getDestDirectory()检索到的目录中,而后者只需要将源文件中指定的path解压到给定的outputDirectory中。

编译安装这个新项目后,可以将它作为依赖添加到maven-dependency-plugin:

<plugin>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.10</version>
    <!-- rest of your configuration -->
    <dependencies>
        <dependency>
            <groupId>my.archiver</groupId>
            <artifactId>rpm-archiver</artifactId>
            <version>0.0.1</version>
        </dependency>
    </dependencies>
</plugin>

这样,当插件运行时,它将知道如何解压具有 rpm 扩展名的文件,并将使用您在 components.xml.[=52 中配置的 class =]