哪些归档格式可以dependencies:unpack-dependencies
解包?例如,据我所知,它无法解压RPM包。它支持的格式列表是否存在?是否有一些技巧可以让maven解压RPM包?
答案 0 :(得分:3)
Maven Dependency Plugin使用内部Plexus Archiver来归档和取消归档文件。截至今天,depends on version 2.9的maven-dependency-plugin
plexus-archiver
版本2.10。
Plexus组件是在META-INF/plexus/components.xml
文件的帮助下配置的。对于Dependency插件,您可以看到此文件in the source code,并为以下扩展程序声明了unarchiver:zip
,jar
,war
,ear
,swc
,nar
,esb
,sar
,car
,par
,rar
。它们都使用相同的ZipUnArchiver
组件,这意味着它们都被提取,就像它们是ZIP文件一样。
Plexus Archiver 2.9还附带了一套预定义的unarchiver,并添加了:bzip2
,gzip
,tar
,tgz
,tar.gz
,{ {1}},tbz2
到列表中。最新版本还添加了tar.bz2
和snappy
个文件。
如果您希望能够解压缩自定义扩展,则需要创建一个能够解压缩它的新项目并将其注册为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.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
中配置的类。