Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ant中的Zip任务-包含空和非空子目录_Ant_Zip_Task - Fatal编程技术网

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

Ant中的Zip任务-包含空和非空子目录,ant,zip,task,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="$

好吧,我对这件事有点疯狂——更让我感到不安的是,我确信几年前我做了一些类似于我现在尝试做的事情

让我马上说,我使用的是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> 

正在创建zip文件。。。
完成
这就是它应该做的,从{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
  • subdir/(可能存在,也可能不存在,也可能不存在文件)
  • subdir2/(可能存在也可能不存在,其中可能有也可能没有文件)
我希望解压缩后的ZIP文件会导致:

  • MyJar.jar
  • config/config1.xml
  • config/config2.xml
  • 次曲面1/
  • 次曲面2/

我如何做到这一点?我尝试过文件集、dirset、zipfileset的变体,但每次尝试都失败了。我所能做的最好的事情就是将{config}目录中的文件提取出来,就像{config}目录不存在一样。。。没有维护该目录的层次结构,但我希望它是这样。

这里有一种方法可以使用
zipfileset
来处理
config
目录:


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

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


我很欣赏这些指点。事实证明,我的部分问题是,我把属性名/位置和属性名/名称值混为一谈——在我期望的相对位置获得绝对路径让我大吃一惊!也就是说,我使用了另一种解决方案:一个单独的目标,创建整个结构,包括空目录。正如我希望zip文件看起来的那样,然后是zip目标,它简单地获取该结构并通过包含所有内容来压缩它。在这种情况下,有一个相对简单的解决方案,我昨天看不到(直到今天有人向我指出)