When undertaking nightly builds we have found the need for a build number.
And we also wanted this to live in a java propery file so that ANT could make
use of it during the build.
Below is a simple task that increments a numeric property in a java property file.
Thanks, Stuart.
/**
* Allows a particular property in a Java property file to be incremented by
* one. Useful for build numbers that increase by one with each build.
*
* @author Stuart Barlow <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Stuart Barlow</a>
*/
public class IncrementProperty extends Task {
private File src = null; private String property = null;
/**
* Do the execution.
*/
public void execute() throws BuildException {if (property == null) {
throw new BuildException("replace token must not be null", location);
}
log("Incrementing " + property + " in file: " + src); if (src != null) {
processFile(src);
}
}/**
* Perform the increment of a property value on the given file.
*
* The replacement is performed on a temporary file which then replaces the original file.
*
* @param src the source file
*/
private void processFile(File src) throws BuildException {
if (!src.exists()) {
throw new BuildException("Increment: source file " + src.getPath() + " doesn't exist", location);
}
File temp = new File(src.getPath() + ".temp");
if (temp.exists()) {
throw new BuildException("Replace: temporary file " + temp.getPath() + " already exists", location);
}
Properties propFile = new Properties();
try {
// load in the property file
FileInputStream in = new FileInputStream(src);
propFile.load(in);
in.close();
} catch (IOException ioe) {
ioe.printStackTrace();
throw new BuildException(ioe, location);
} try {
// get the old value and set the new one.
String strValue = propFile.getProperty(property);
long longValue = Long.parseLong(strValue);
longValue++;
Long newIncrementedValue = new Long(longValue);
propFile.setProperty(property, newIncrementedValue.toString());// write out the property file
FileOutputStream out = new FileOutputStream(src);
propFile.store(out, "Ant - written out by the task: IncrementProperty");
out.close();
} catch (Exception ex) {
ex.printStackTrace();
throw new BuildException(ex, location);
}
}
/**
* Set the source file.
*/
public void setFile(File file) {
this.src = file;
} /**
* Set the string token to replace.
*/
public void setProperty(String property) {
this.property = property;
}
}