Ant中的Zip任务 - 包括空子目录和非空子目录

时间:2014-03-18 21:22:36

标签: ant zip task

好吧,我对这一点感到有点疯狂 - 更让我感到困惑的是,几年前我确信我做了类似于我现在要做的事情。

让我说吧,我正在使用ANT版本1.8.2,所以我没有zip和空文件夹的1.6.2问题。我的大多数搜索似乎都提出了1.6.2问题。

所以,这是我的build.xml片段:

<target name="zip" depends="jar">  
    <echo>Creating zip file...</echo>  
    <zip destfile="${dist}/${zipfilename}">  
        <zipfileset dir="${dist}" includes="${jarfilename}" />  
    </zip>  
    <echo>...complete</echo>  
</target> 

这可以做它应该做的事情,从{dist}目录中获取jar文件,并将其放在zip中,以便不保留{dist}目录 - 即:jar文件被解压缩到zip的任何地方文件是。

但是,我想知道如何执行以下操作:

  • 包含一个{config}目录及其中的所有文件,但名为“test-config.xml”
  • 的文件除外
  • 包含两个单独的空目录 - 例如{subdir1}和{subdir2}。它们可能有也可能没有文件,但我不希望这些目录中的任何文件被压缩。

对于那个带有空目录的第二部分,我完全满足于zip任务在zip本身创建它们而不必在本地文件系统上创建它们。事实上,理想的情况是,如果他们在zip文件中并且不在本地文件系统中 - 但我将采取任何可以获得的方法。

因此,我的本地文件系统将如下所示:

  • DIST / MyJar.jar
  • 配置/ config1.xml
  • 配置/ config2.xml
  • 配置/测试-config.xml中
  • subdir1 /(可能存在也可能不存在,可能有也可能没有文件)
  • subdir2 /(可能存在也可能不存在,可能有也可能没有文件)

我希望ZIP文件在解压缩时导致:

  • MyJar.jar
  • 配置/ config1.xml
  • 配置/ config2.xml
  • subdir1 /
  • subdir2 /

我如何做到这一点?我已经尝试过fileset,dirset,zipfileset的变种,并且每次尝试都失败了。我管理的最好的方法是将{config}目录中的文件解压缩,就像{config}目录不存在一样......不保留层次结构,但我希望它是。< / p>

1 个答案:

答案 0 :(得分:1)

以下是使用zipfileset处理config目录的一种方法:

<zipfileset dir="." includes="config/*" excludes="config/test-config.xml"/>

我能想到将空文件夹放入zip中的唯一方法是在文件系统上创建它们,使用zipfileset添加它们,然后在创建后删除它们zip文件。

这是一个可以满足你需要的片段(注意:我根据你的例子使用文件夹和文件名;你可以根据需要用属性引用替换它们):

<tempfile property="temp.file" destDir="." prefix="foo"/>
<mkdir dir="${temp.file}/subdir1"/>
<mkdir dir="${temp.file}/subdir2"/>
<zip destfile="${dist}/${zipfilename}">
  <zipfileset dir="${dist}" includes="${jarfilename}"/>
  <zipfileset dir="${temp.file}" includes="*"/>
  <zipfileset dir="." includes="config/*" excludes="config/test-config.xml"/>
</zip>
<delete dir="${temp.file}"/>