使用Maven解压缩包中的内部zip文件

39

我可以通过maven-dependency插件来解压zip文件,但是现在我遇到了一个问题,那就是该zip文件内部包含其他zip文件,我需要将它们也解压出来。请问该怎么做?

4个回答

44

您可以使用ant任务运行程序插件来解压任何文件:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.6</version>
    <executions>
        <execution>
            <id>prepare</id>
            <phase>validate</phase>
            <configuration>
                <tasks>
                    <echo message="prepare phase" />
                    <unzip src="zips/archive.zip" dest="output/" />
                    <unzip src="output/inner.zip" dest="output/" />
                    <unzip dest="output">
                      <fileset dir="archives">
                        <include name="prefix*.zip" />
                      </fileset>
                    </unzip>
                </tasks>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

我理解这是放在你的pom.xml文件中的? - Rob Avery IV
是的,这是你的Maven pom.xml文件的一部分。 - Boris Pavlović
在这个例子中,你如何解压与正则表达式匹配的文件?例如:<unzip src="zips/archive[0-9].zip" dest="output/" /> - Georgios Stathis
尝试使用通配符:<unzip src="zips/archive*.zip" dest="output/" /> - Boris Pavlović
1
不,这样行不通。我最好使用一个文件集:<unzip dest="output"> <fileset dir="zips"> <include name="archive*.zip" /> </fileset> </unzip> - Georgios Stathis

24

使用ANT已经不再时髦了 ;)

http://maven.apache.org/plugins/maven-dependency-plugin/examples/unpacking-artifacts.html

解压zip文件(archive.zip)的示例代码:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>unpack</id>
            <phase>process-resources</phase>
            <goals>
                <goal>unpack</goal>
            </goals>
            <configuration>
                <artifactItems>
                    <artifactItem>
                        <groupId>foo</groupId>
                        <artifactId>archive</artifactId>
                        <version>1.0-SNAPSHOT</version>
                        <type>zip</type>
                    </artifactItem>
                </artifactItems>
            </configuration>
        </execution>
    </executions>
</plugin>

首先需要将文件archive.zip安装到Maven仓库中,例如使用任务Attach artifact

org.codehaus.mojo:build-helper-maven-plugin:build-helper:attach-artifact

18
但是这只能解压缩工件(artefacts),而不能解压任意文件。 - Ondra Žižka
使用Maven,您可以将任何“任意”文件视为构件,只需查看build-helper:attach-artifact。@OndraŽižka - MariuszS
2
@MariuszS,如何在本地文件系统上处理任意文件? - tojofo
4
蚂蚁可能不够酷,但却需要更少的代码行数并能产生相同的结果。另外,如果你使用build-helper附加构建工具,则会产生许多其他不愉快的副作用。 - Alexander Pogrebnyak
1
我进行了测试,这个程序无法解压内部的zip文件。最好使用另一个答案中描述的Ant插件。 - Sergio
显示剩余3条评论

10

TrueZIP Maven插件 也非常好用。示例配置:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>truezip-maven-plugin</artifactId>
    <version>1.2</version>
    <executions>
        <execution>
            <id>copy-package</id>
            <goals>
                <goal>copy</goal>
            </goals>
            <phase>package</phase>
            <configuration>
                <verbose>true</verbose>
                <fileset>
                    <directory>outer.zip</directory>
                    <outputDirectory>${project.build.directory}/outer</outputDirectory>
                </fileset>
                <fileset>
                    <directory>${project.build.directory}/outer/inner.zip</directory>
                    <outputDirectory>${project.build.directory}/inner</outputDirectory>
                </fileset>
            </configuration>
        </execution>
    </executions>
</plugin>

官方示例


1
Codehaus即将关闭,因此链接现在指向他们的“我们正在重新组织”页面。 - Troy Daniels
@palacsint,上述插件的许可证是什么?我在他们的文档中找不到。 - Kasun Siyambalapitiya

1

3
这个回答是不正确的,问题是关于一个内含 ZIP 文件的文件,而不是依赖项。 - Sergio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接