tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christopher Schultz <>
Subject Re: [OT] Order of attributes significant in zipfileset?
Date Tue, 26 Apr 2016 19:29:47 GMT

Off-topic, but okay.

On 4/26/16 2:18 PM, Dave Glasser wrote:
> I discovered this in ant 1.6.5, and found that it still behaves this way in 1.9.7.
> If you have a <zipfileset> element with both a dir and a file attribute, it will
produce different results depending on the order in which those attributes appear. If the
file attribute appears first, it behaves as you would expect. For example, with this:
> <zipfileset file="file1.txt" dir="dir1"/>
> It looks for a file named "file1.txt" inside the directory "dir1". However, with this:
> <zipfileset dir="dir1" file="file1.txt"/>
> It looks for file1.txt inside the current working directory. This can be verified by
running the demonstration target I provide below with the -debug switch, and reading the debug
> I want to make clear that I'm aware that the docs for fileset say:
> "Either dir or file must be specified" and that I might be doing it wrong. You could
argue otherwise, but perhaps that does in fact unambiguously imply that having both is incorrect
and hence the behavior is undefined. Be that as it may, what I would like to know is this:
> Is this a known, and expected behavior?  Is it documented anywhere?

I think anything not documented should be considered "undefined".

I tend to agree with you, however, that the order of the attributes
effect the behavior is a little surprising.

> Should I assume that the order of attributes is significant in other places throughout
my build.xml file?
> Here's a self-contained target that demonstrates this behavior:
>   <target name="oa">
>     <property name="JARCMD" value="jar"/>
>     <!-- Delete both zip files if they exist. -->
>     <property name="ZIP1" value=""/>
>     <property name="ZIP2" value=""/>
>     <delete file="${ZIP1}"/>
>     <delete file="${ZIP2}"/>
>     <property name="DIR1" value="dir1"/>
>     <mkdir dir="${DIR1}"/>
>     <!-- make sure there are no files named file1.txt or file2.txt in the
>          current directory, so we know they're not being read from there. -->
>     <fail 
>       message="A file named file1.txt exists in the current directory.">
>       <condition><available file="file1.txt"/></condition>
>     </fail>
>     <fail 
>       message="A file named file2.txt exists in the current directory.">
>       <condition><available file="file2.txt"/></condition>
>     </fail>
>     <touch file="${DIR1}/file1.txt"/>
>     <touch file="${DIR1}/file2.txt"/>
>     <zip destfile="${ZIP1}">
>       <zipfileset file="file1.txt" dir="${DIR1}"/>
>       <zipfileset file="file2.txt" dir="${DIR1}"/>
>     </zip>
>     <zip destfile="${ZIP2}">
>       <zipfileset file="file1.txt" dir="${DIR1}"/>
>       <!-- This file will not be included, because the dir attribute 
>            comes before the file attribute. -->
>       <zipfileset dir="${DIR1}" file="file2.txt"/>
>     </zip>
>     <echo>Contents of ${ZIP1}:</echo>
>     <exec dir="." executable="${JARCMD}">
>       <arg value="-tvf"/>
>       <arg value="${ZIP1}"/>
>     </exec>
>     <echo>Contents of ${ZIP2}:</echo>
>     <exec dir="." executable="${JARCMD}">
>       <arg value="-tvf"/>
>       <arg value="${ZIP2}"/>
>     </exec>
>   </target>

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message