将子文件夹压缩为单独的zip文件

时间:2014-05-26 08:40:05

标签: maven ant maven-antrun-plugin

我有一个像这样的目录结构: Parent |->A |->B |->* 我需要像这样拉链: Dest |->A.zip |->B.zip |->*.zip *表示我不知道子文件夹的名称是什么。

我该怎么做?

我正在使用maven项目,但我不介意使用antrun插件

2 个答案:

答案 0 :(得分:2)

这是我喜欢的另一个解决方案,因为它不需要反对贡献:

<target name="zipContentPackage">
    <basename property="dir.name" file="${file_name}"/>
    <echo message="Zipping folder: ${dir.name}"/>
    <zip destfile="${zip_dir}/${dir.name}.zip" basedir="${file_name}"/>
</target>

<target name="-wrapper-zipContentPackage">
    <antcall target="zipContentPackage" inheritAll="true">
        <param name="file_name" value="${basedir}" />
    </antcall>
</target>

<target name="packageContent">
    <delete dir="${zip_dir}"/>
    <mkdir dir="${zip_dir}"/>

    <subant genericantfile="${ant.file}" target="-zipContentPackage" inheritall="true">
        <dirset dir="${content_dir}" includes="*" />
    </subant>
</target>

注意:

  1. 我使用sagioto's code来说明
  2. 这不是最有效的解决方案

答案 1 :(得分:0)

我最终使用了antcontrib的foreach

<target name="init">
    <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpathref="maven.compile.classpath"/>
</target>


<target name="packageContent" depends="init">
    <delete dir="${zip_dir}"/>
    <mkdir dir="${zip_dir}"/>
    <foreach target="zipContentPackage" param="file_name">
        <path>
            <dirset dir="${content_dir}" includes="*"/>
        </path>
    </foreach>
</target>

<target name="zipContentPackage">
    <basename property="dir.name" file="${file_name}"/>
    <echo message="Zipping folder: ${dir.name}"/>
    <zip destfile="${zip_dir}/${dir.name}.zip" basedir="${file_name}"/>
</target>