好吧,我对这一点感到有点疯狂 - 更让我感到困惑的是,几年前我确信我做了类似于我现在要做的事情。
让我说吧,我正在使用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的任何地方文件是。
但是,我想知道如何执行以下操作:
对于那个带有空目录的第二部分,我完全满足于zip任务在zip本身创建它们而不必在本地文件系统上创建它们。事实上,理想的情况是,如果他们在zip文件中并且不在本地文件系统中 - 但我将采取任何可以获得的方法。
因此,我的本地文件系统将如下所示:
我希望ZIP文件在解压缩时导致:
我如何做到这一点?我已经尝试过fileset,dirset,zipfileset的变种,并且每次尝试都失败了。我管理的最好的方法是将{config}目录中的文件解压缩,就像{config}目录不存在一样......不保留层次结构,但我希望它是。< / p>
答案 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}"/>