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:zip
、jar
、war
、ear
, swc
, nar
, esb
, sar
, car
, par
, rar
。它们都使用相同的 ZipUnArchiver
组件,这意味着它们都被提取为 ZIP 文件。
Plexus Archiver 2.9 还附带了一组预定义的解压器,它添加了:bzip2
、gzip
、tar
、tgz
、tar.gz
, tbz2
, tar.bz2
到列表。最新版本还添加了 snappy
和 xz
文件。
如果您希望能够解压自定义扩展,您将需要创建一个能够解压它的新项目并将其注册为 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 =]
可以dependencies:unpack-dependencies
解压哪些存档格式?例如,据我所知,它无法解压 RPM 包。是否有它支持的格式列表?有什么技巧可以让 maven 解压 RPM 包吗?
Maven 依赖插件在内部使用 Plexus Archiver 来归档和取消归档文件。从今天开始,maven-dependency-plugin
depends on version 2.9 of plexus-archiver
.
Plexus 组件是在 META-INF/plexus/components.xml
文件的帮助下配置的。在依赖插件的情况下,你可以看到这个文件 in the source code 并且它为以下扩展声明了 unarchiver:zip
、jar
、war
、ear
, swc
, nar
, esb
, sar
, car
, par
, rar
。它们都使用相同的 ZipUnArchiver
组件,这意味着它们都被提取为 ZIP 文件。
Plexus Archiver 2.9 还附带了一组预定义的解压器,它添加了:bzip2
、gzip
、tar
、tgz
、tar.gz
, tbz2
, tar.bz2
到列表。最新版本还添加了 snappy
和 xz
文件。
如果您希望能够解压自定义扩展,您将需要创建一个能够解压它的新项目并将其注册为 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 =]