[ant 1.6.1]
Hvad er det med Ant's pattern matching der bare overhovedet ikke virker?
Tag fx. denne backup buildfil:
<target name="all" description="Backup" >
<copy todir="${dest.dir}\D">
<fileset dir="D:\">
<include name="Temp\**"/>
<include name="Test\**"/>
<include name="Data\**"/>
<exclude name="Data\Vmware\**\*REDO*"/>
<exclude name="Data\Vmware\**\*lck"/>
<exclude name="Data\Vmware\**\*sav"/>
</fileset>
</copy>
..
I min VMware folder har jeg flere filer der hedder fx:
Windows 2000 Professional.vmdk-s001.REDO_a03260
Windows 2000 Professional.vmx.sav
Windows 2000 Professional.vmx.lck
Jeg har prøvet ALLE tænkelige måder at matche lck og sav filerne, men det er
Ant total ligeglad med. Den kommer troeligt tilbage med en fejl hver eneste
gang:
"...D:\Data\Personal\Backup\usbbackup.xml:20: Failed to copy
D:\Data\Personal\VMWare\Windows XP Professional\Windows XP
Professional.vmx.lck to F:\Backup\D\Data\Personal\VMWare\Windows XP
Professional\Windows XP Professional.vmx.lck due to The process cannot
access the file because another process has locked a portion of the file..."
Hverken
<exclude name="Data\Vmware\**\*lck"/>
eller
<exclude name="Data\Vmware\**\*.lck"/>
eller
<exclude name="Data\Vmware\**\*lck*"/>
...kan matche lck filerne. Det er som om Ant stopper ved det første punktum i
et filnavn og siger "aha! filens endelse kommer lige bagefter kan jeg regne
ud" - det hænger jo bare overhovedet ikke sammen hvis en fil har to
"endelser". Jeg fatter i det hele taget ikke hvorfor pattern matching koden
prøver at gøre sig klog på hvad filens endelse er, i stedet for blot at
prøve at matche to tekstmønstre.
Er der da ikke et eller andet geni der kan fortælle mig hvordan jeg
overbeviser Ant om IKKE at tage lck filerne med?
Jeg har også prøvet at bruge Ant til at tage backup af mit C: drev. Filen
ntuser.dat selvfølgelig ikke åbnes, så derfor udelukker jeg den. Men også
her var jeg nødt til at eksperimentere mig frem, og nåede til følgende
løsning:
<exclude name="**\ntuser*.*"/>
<exclude name="**\NTUSER.DAT"/>
Ja, først en rimelig generisk lowercase udgave der matcher en
ntuser.dat.noget, og bagefter en anden der matcher selve dat filen. I
uppercase. Første pattern burde være nok, og det burde være nok at skrive
"*\ntuser*". En * har altid matchet enhver tekst, men det gør den bare ikke
i Ant. Der matcher den fx. et directory eller et filnavn (uden endelse), og
så har den et unødvendigt og forvirrende ** koncept der så matcher flere
directory niveauer. Man aner ikke hvornår man skal bruge det ene og det
andet.
Kan godt være der er meget ståhej omkring Ant, men jeg kan i hvert fald få
øje på ET sted hvor det virker fuldstændig totalt defekt.
/Michael
|