【问题标题】:Zip task in Ant - incuding empty and non-empty subdirectoriesAnt 中的 Zip 任务 - 包括空子目录和非空子目录
【发布时间】:2014-03-19 10:08:11
【问题描述】:

好吧,我对这个有点发疯了——更让我烦恼的是,我确信几年前我做过的事情与我现在想做的事情相似。

让我直接说,我使用的是 ANT 版本 1.8.2,所以我没有 1.6.2 版本的 zip 和空文件夹问题。我的大部分搜索似乎都提出了 1.6.2 的问题。

所以,这是我的 build.xml sn-p:

<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
  • config/config1.xml
  • config/config2.xml
  • config/test-config.xml
  • subdir1/(可能存在也可能不存在,其中可能有也可能没有文件)
  • subdir2/(可能存在也可能不存在,其中可能有也可能没有文件)

我希望 ZIP 文件在解压缩后得到:

  • MyJar.jar
  • config/config1.xml
  • config/config2.xml
  • subdir1/
  • subdir2/

我该如何做到这一点?我已经尝试过文件集、dirset、zipfileset 的变体,但每次尝试都失败了。我所管理的最好的方法是让 {config} 目录中的文件被提取,就好像 {config} 目录不存在一样......没有维护它的层次结构,但我想要它。

【问题讨论】:

    标签: ant zip task


    【解决方案1】:

    这是您可以使用zipfileset 处理config 目录的一种方式:

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

    我能想到的将 empty 空文件夹放入 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}"/>
    

    【讨论】:

    • 感谢您的指点。事实证明,我的部分问题是我将属性名称/位置与属性/名称值混合在一起 - 让我在获得我期望相对的绝对路径时感到困惑!也就是说,我采用了另一种解决方案:创建整个结构的单独目标,包括空目录。就像我希望 zip 文件看起来一样,然后是 zip 目标,它简单地采用该结构并通过包含所有它来压缩它。在这种情况下,有一个相对简单的解决方案,我昨天看不到(直到今天有人向我指出)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 2023-04-08
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多