tags:

views:

315

answers:

4

I have a property, app.version, which is set to 1.2.0 (and, of course, always changing) and need to create zip file with name "something-ver-1_2_0". Is this possible?

A: 

It's possible using the zip task

<zip zipfile="something-ver-${app.version}.zip">
<fileset basedir="${bin.dir}" prefix="bin">
    <include name="**/*" />
</fileset>
<fileset basedir="${doc.dir}" prefix="doc">
    <include name="**/*" />
</fileset></zip>

For more information about the zip task: http://ant.apache.org/manual/CoreTasks/zip.html

ryudice
This will get "something-ver-1.2.0.zip", and I need to recieve "something-ver-1_2_0.zip". Maybe, this is impossible? :)
Shark
A: 

Since the property app.version is always changing i assume you don't want to hard code it into the properties files, rather pass it when you do the build. Further to this answer, you can try the following on the command line;

ant -f build.xml -Dapp.version=1.2.0

changing app.version to the one required then.

Edit:

Understood better your question from the feedback. Unfortunately ant does not have string manipulation tasks, you need to write you own task for this. Here is a close example.

n002213f
Thank you. That's what I needed. A bit messy, but working :)
Shark
pathconvert can be used to perform string manipulation in ANT. 'mapper's also include support for regex.
Mads Hansen
A: 

Another approach is to filter the version number from a file to a property using a regular expression, as suggested in this example:

<loadfile srcfile="${main.path}/Main.java" property="version">
    <filterchain>
        <linecontainsregexp>
            <regexp pattern='^.*String VERSION = ".*";.*$'/>
        </linecontainsregexp>
        <tokenfilter>
            <replaceregex pattern='^.*String VERSION = "(.*)";.*$' replace='\1'/>
        </tokenfilter>
        <striplinebreaks/>
    </filterchain>
</loadfile>
trashgod
+2  A: 

You can use the pathconvert task to replace "." with "_" and assign to a new property:

<?xml version="1.0" encoding="UTF-8"?>
<project>
    <property name="app.version" value="1.2.0"/>

    <pathconvert property="app.version.underscore" dirsep="" pathsep="" description="Replace '.' with '_' and assign value to new property">
        <path path="${app.version}" description="Original app version with dot notation" />

        <!--Pathconvert will try to add the root directory to the "path", so replace with empty string -->
        <map from="${basedir}" to="" />

        <filtermapper>
            <replacestring from="." to="_"/>     
        </filtermapper>

    </pathconvert>

    <echo>${app.version} converted to ${app.version.underscore}</echo>
</project>
Mads Hansen