Dave,

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 output.
> 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="zip1.zip"/>
>     <property name="ZIP2" value="zip2.zip"/>
>     <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: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to