哪些格式可以依赖:unpack-dependencies目标解包?

时间:2016-08-25 10:23:58

标签: maven maven-dependency-plugin

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

1 个答案:

答案 0 :(得分:3)

Maven Dependency Plugin使用内部Plexus Archiver来归档和取消归档文件。截至今天,depends on version 2.9maven-dependency-plugin plexus-archiver版本2.10。

Plexus组件是在META-INF/plexus/components.xml文件的帮助下配置的。对于Dependency插件,您可以看到此文件in the source code,并为以下扩展程序声明了unarchiver:zipjarwarearswcnaresbsarcarparrar。它们都使用相同的ZipUnArchiver组件,这意味着它们都被提取,就像它们是ZIP文件一样。

Plexus Archiver 2.9还附带了一套预定义的unarchiver,并添加了:bzip2gziptartgztar.gz,{ {1}},tbz2到列表中。最新版本还添加了tar.bz2snappy个文件。

如果您希望能够解压缩自定义扩展,则需要创建一个能够解压缩它的新项目并将其注册为Plexus组件。对于RPM包,您可以创建一个xz Maven项目,并在rpm-archiver内部包含以下内容:

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> 是您能够解压RPM文件的自定义类的完全分类名称。此类必须实现接口class.able.to.unpack.rpm.packages,但为了简化,您可以使此类继承自org.codehaus.plexus.archiver.UnArchiver。您需要做的就是覆盖org.codehaus.plexus.archiver.AbstractUnArchiverexecute()方法。前者需要将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中配置的类。