使用 Maven 解压缩并重新压缩文件?

Posted

技术标签:

【中文标题】使用 Maven 解压缩并重新压缩文件?【英文标题】:Unzip and re zip a file using Maven? 【发布时间】:2017-02-03 22:36:12 【问题描述】:

问题:在 Maven 中是否有任何方法(无需借助 ant 插件)解压缩文件、cd 进入目录、删除文件并重新压缩,所有这些都作为构建?

这是必要的,因为它是一个复杂的构建,也不想使用 gradle 来完成这个任务。

【问题讨论】:

你能解释一下为什么你需要这样做吗?这个 ZIP 是生成的吗?如果是这样,由谁以及何时?您要删除其中的哪个文件,为什么? Unpack inner zips in zip with Maven的可能重复 mvn 依赖:unpack + maven-assembly-plugin 用于重新压缩 你可以看看maven-assembly-plugin。这可以处理解压缩和重新打包... 【参考方案1】:

truezip-maven-plugin 及其remove 目标也可以一步满足解压缩、删除文件和再次压缩的要求:

从现有存档中删除一组文件。

official 示例也涵盖了这种情况。

给定以下 sn-p:

<properties>
    <archive>$project.basedir/sample.zip</archive>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>truezip-maven-plugin</artifactId>
            <version>1.2</version>
            <executions>
                <execution>
                    <id>remove-a-file</id>
                    <goals>
                        <goal>remove</goal>
                    </goals>
                    <phase>package</phase>
                    <configuration>
                        <fileset>
                            <!-- note how the archive is treated as a normal file directory -->
                            <directory>$archive</directory>
                            <includes>
                                <include>hello.txt</include>
                            </includes>
                        </fileset>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

并执行:

mvn clean package

构建将处理$archive 文件(在这种情况下,sample.zippom.xml 文件处于同一级别,即在project.basedir 目录中)并从中删除hello.txt 文件.然后重新压缩所有内容。

我刚刚测试成功,如果不需要你甚至可以跳过properties部分。但是,您也应该仔细了解:

zip 文件不应受版本控制,否则会在每次构建时产生冲突 该行为很可能不应该是默认 Maven 构建的一部分,因此是 Maven profile 的良好候选者 插件替换了原始文件,因此如果这是一个问题,您可以先将其复制到另一个位置,然后按上述方法处理。要复制它,您可以使用maven-resources-plugin 及其copy-resources 目标。

【讨论】:

@user1974753 你试过这个解决方案了吗?

以上是关于使用 Maven 解压缩并重新压缩文件?的主要内容,如果未能解决你的问题,请参考以下文章

压缩文件夹无效或已损坏

如何在 C# 中重新压缩 ODT 文件并使其可读?

解压缩、编辑、压缩和连接文件

使用 Python 解压缩文件并返回它创建的所有目录

使用 Python 下载并解压缩文件

将文件解压缩到内存中,调整文件,压缩并流式传输到客户端(Node.js)