3/10/2010

How to trim ant property string value

When writing ant build files, I often need to trim the string value of an ant property. But I couldn't find a simple task to do that. So I wrote the following ant macrodef for this purpose. In short, it saves the property value into a temp file, trims lines while moving the file, and loads the file back into a new property.

<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." default="trim" name="test">
<target name="trim">
<trim input="${text}" property="text.trimmed" />
<echo message="original text='${text}'" />
<echo message="trimmed text='${text.trimmed}'" />
</target>

<macrodef name="trim">
<attribute name="input" />
<attribute name="property" />
<sequential>
<tempfile property="temp.file" />
<echo file="${temp.file}" message="@{input}" />
<move file="${temp.file}" tofile="${temp.file}.2">
<filterchain>
<trim/>
</filterchain>
</move>
<loadfile property="@{property}" srcFile="${temp.file}.2" />
<delete file="${temp.file}.2" failonerror="false" />
</sequential>
</macrodef>

</project>
To run this target:
/tmp > ant -Dtext=' a b c '
Buildfile: build.xml

trim:
[move] Moving 1 file to /tmp
[delete] Deleting: /tmp/null1355243589.2
[echo] original text=' a b c '
[echo] trimmed text='a b c'

BUILD SUCCESSFUL
Total time: 0 seconds
The ant macro named trim declares the trim operation, while the trim target shows an example of calling the trim macro.

There are other solutions to achive the same result, e.g., write a custom ant task, or use ant-contrib tasks. But the advantage of this sample is that it only uses built-in ant tasks and no other library jars are needed.

14 comments:

Chris Holman said...
This comment has been removed by the author.
Chris Holman said...

File operations like this are relatively slow.
You could also use the ant contrib task propertyregex:

<macrodef name="trim">
  <attribute name="property" />
  <sequential>
    <propertyregex
      property="@{property}"
      input="${@{property}}"
      regexp="[\s]*(.+)[\s]*"
      replace="\1"
      defaultvalue="${@{property}}"
      override="true"
    />
  </sequential>
</macrodef>

yogesh said...
This comment has been removed by the author.
yogesh said...

I have one property file named "yogesh.properties".
This property file is used in filterset
<filterset id="myfilterset">
<filtersfile file="${yogesh.properties}"/>
<filter token="svn.folder.location" value="${svn.folder.location}"/>
<filter token="lastBranchRevision" value="${lastBranchRevision}"/>
this filter set is used in copy
<copy todir="${build.root}/${appname}" filtering="true" >
<filterset refid="myfilterset"/>
<fileset dir="../WebContent">
<include name="**/*.dtd"/>
<include name="WEB-INF/web.xml"/>
<include name="META-INF/context.xml"/>
</fileset>
</copy>
I want to trim values of "yogesh.property"(without change/Edit property file) before it place to the target.How to achieve this?

Steve Smith said...

Great and Useful Article.

Online Java Course

Java Online Training

Java Course Online

J2EE training

online J2EE training

Best Recommended books for Spring framework

Java Interview Questions












Java Training Institutes in Chennai

Java Training in Chennai

J2EE Training in Chennai

java j2ee training institutes in chennai

Steve Smith said...

Great and Useful Article.

Online Java Course

Java Online Training

Java Course Online

J2EE training

online J2EE training

Best Recommended books for Spring framework

Java Interview Questions












Java Training Institutes in Chennai

Java Training in Chennai

J2EE Training in Chennai

java j2ee training institutes in chennai

Vũ Diệu Linh said...

I enjoyed on reading your blog post. Very interesting to read this article.I would like to thank you for the efforts you had made for writing this awesome article. Please visit my website, Friv 4000 Games is where all the free friv games.
Friv 4000

sandy star said...

At this time, it seems like Word Press is the preferred blogging platform available right now. (from what I’ve read) Is that what you’re using on your blog? Great post, however, I was wondering if you could write a little more on this subject?
Best AWS Training in Marathahalli | AWS Training in Marathahalli
Amazon Web Services Training in Anna Nagar, Chennai |Best AWS Training in Anna Nagar, Chennai

chitra pragya said...

Thank you a lot for providing individuals with a very spectacular possibility to read critical reviews from this site.

angularjs Training in chennai
angularjs Training in chennai

angularjs-Training in tambaram

angularjs-Training in sholinganallur

angularjs-Training in velachery

sai said...

Excellent post!!!. The strategy you have posted on this technology helped me to get into the next level and had lot of information in it.

python training Course in chennai | python training in Bangalore | Python training institute in kalyan nagar

johnsy sai said...

Very nice post here and thanks for it .I always like and such a super contents of these post.Excellent and very cool idea and great content of different kinds of the valuable information's.
Online DevOps Certification Course - Gangboard
Best Devops Training institute in Chennai

Afiah B said...

Impressive. Your story always bring hope and new energy. Keep up the good work.
Java training in Annanagar | Java training in Chennai

Java training in Chennai | Java training in Electronic city

nivatha said...

This is quite educational arrange. It has famous breeding about what I rarity to vouch. Colossal proverb. This trumpet is a famous tone to nab to troths. Congratulations on a career well achieved. This arrange is synchronous s informative impolite festivity to pity. I appreciated what you ok extremely here.
Data Science training in kalyan nagar | Data Science training in OMR

Data Science training in chennai | Data science training in velachery

Data science training in tambaram | Data science training in jaya nagar

SRI said...

This is most informative and also this post most user friendly and super navigation to all posts... Thank you so much for giving this information to me.. 

best rpa training in chennai | rpa online training |
rpa training in chennai |
rpa training in bangalore
rpa training in pune
rpa training in marathahalli
rpa training in btm