-------- Original Message --------
Subject: Re: Remove duplicate JAR file names from an XML file
From: Michael Ludwig <[email protected]>
To: Ant Users List <[email protected]>
Date: 31.07.2010 13:21
> Gilbert Rebhan schrieb am 31.07.2010 um 00:47 (+0200):
>
>> Whenever some kind of xml processing occurs within your ant workflow
>> i recommend the use of the xmltask[1].
>
>> From your first posting i assume you have some xml like :
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <jars>
>> <files>antlr-2.7.6.jar antlr-2.7.6.jar antlr-2.7.6.jar
>> aopalliance-1.0.jar aopalliance-1.0.jar aopalliance-1.0.jar
>> commons-validator-1.0.2.jar commons-validator-1.0.2.jar
>> commons-lang-2.2.jar commons-lang-2.2.jar</files>
>> </jars>
>
> If that is the OP's XML, poor design indeed.
sure, he didn't provide more details than =
/*
I have an xml file which lists JAR file names in it with space
>specified as a delimiter.
*/
> Should be using a regex here: getProperty("alljars").split("\\s+");
> That will take care of linebreaks and tabs, not only spaces.
not required in that case, as xmltask uses a blank as default
delimiter if not specified :
<xmltask source="./jars.xml">
<copy path="//files/text()"
append="true"
property="alljars"
/>
</xmltask>
>> [xmltask] Cannot append values to properties
>> ... don' get annoyed from those messages, simply ignore
>> or do a search in the xmlproperty task sources and comment it out
>
> Why is it there in the first place? Appending to a property seems to
> work just fine, at least in this case.
from what i believe it's a warning because of backward compatibility,
should be in logged in debuglevel only.
Appending to Property works fine.
> While I like XML, I think it's overkill for a list of items. Here's a
> plain text example:
Maybe it's not his choice as he get's xml from an external tool !?
> mich...@wladimir:~ :-) expand -t2 res.xml
> <project>
> <file file="res.txt" id="input"/>
> <union id="tokens">
> <sort>
> <tokens>
> <resources refid="input"/>
> <stringtokenizer/>
> </tokens>
> </sort>
> </union>
> <pathconvert refid="tokens"
> pathsep="${line.separator}"
> property="tokens2" />
> <echo message="${tokens2}"/>
> </project>
>
> mich...@wladimir:~ :-) ant -f res.xml
> Buildfile: T:\cygwin\home\michael\res.xml
> [echo] antlr-2.7.6.jar
> [echo] aopalliance-1.0.jar
> [echo] commons-lang-2.2.jar
> [echo] commons-validator-1.0.2.jar
>
> BUILD SUCCESSFUL
> Total time: 0 seconds
> -------------------------
>
> Can any of it be simplified further?
yep, you're right, i forgot rescources as usual,
had been with ant 1,6,5 much too long ;-)
i would write it that way =
<?xml version="1.0" encoding="UTF-8"?>
<project>
<!-- Import XMLTask -->
<taskdef name="xmltask"
classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>
<target name="depends">
<xmltask source="./jars.xml">
<copy path="//files/text()"
append="true"
property="alljars"
/>
</xmltask>
<pathconvert property="uniquejars" pathsep=",">
<union>
<sort>
<tokens>
<propertyresource name="alljars"/>
<stringtokenizer/>
</tokens>
</sort>
</union>
</pathconvert>
</target>
<target name="main" depends="depends">
<echo>$${uniquejars} = ${uniquejars}</echo>
<echo>$${alljars} = ${alljars}</echo>
</target>
</project>
-----------------------------------
if you like perl, you may like (j)ruby or groovy
for scripting in ant <script ../> <scriptdef ../>
Sometimes it's easier to write a small script before
using too much clumsy xml or writing a new task.
Also try ant-flaka [1], which aims to simplify writing ant files.
i just started using it, and it rocks :-)
Regards, Gilbert
[1] http://code.google.com/p/flaka/
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]