作为自动部署管道的一部分,我使用tar.gz
创建maven-assembly-plugin
文件,然后使用python' tarfile
模块解压缩。
提取失败,但例外情况为:
Traceback (most recent call last):
File "tarfile-assembly-testcase/extract_tar.py", line 20, in <module>
tarfile.open(fileobj=f, mode='r:gz')
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/tarfile.py", line 1676, in open
return func(name, filemode, fileobj, **kwargs)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/tarfile.py", line 1725, in gzopen
**kwargs)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/tarfile.py", line 1703, in taropen
return cls(name, mode, fileobj, **kwargs)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/tarfile.py", line 1572, in __init__
self.firstmember = self.next()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/tarfile.py", line 2335, in next
raise ReadError(str(e))
ReadError: invalid header
压缩和未压缩的tar文件都会发生这种情况。可以从命令行解压缩相同的文件。我已使用bsdtar 2.8.3
和tar (GNU tar) 1.26
对其进行了测试。我使用python 2.7
。
请尝试我在github上发布的demo。它是一个maven项目,运行mvn包它会创建一个包含项目源的tar.gz(只有pom.xml)。包含的python脚本尝试使用tarfile
提取它。
让maven-assembly-plugin
和python&#39; s tarfile
一起玩得好吗?
答案 0 :(得分:3)
我发现了问题。复制解决方案后,我在Stackoverflow中找到here (see "Version pinning" paragraph)以供后代使用。
版本2.4的maven-assembly-plugin
导入plexus-archiver
的错误版本。强制maven-assembly-plugin
使用最新的plexus-archiver
就可以了。正如链接帖子中所建议的,我还升级了plexus-io
。
这是代码
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<dependencies>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-archiver</artifactId>
<version>2.4.4</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-io</artifactId>
<version>2.0.10</version>
</dependency>
</dependencies>
</plugin>