>Update (August 26, 2009): I’ve polished the Ant task for LessCSS files quite a bit and implemented support for both lessc and plessc (the LessPHP alternative).
Features:
- converts .less files to .css
- supports both lessc and plessc (at least one is required)
- supports time-outs
- only processes changed files
- supports separate source/target directories, with include/exclude patterns
It’s available under de BSD-license for download from github: http://github.com/znerd/lesscss-ant-task/.
Notes:
- for lessc (tested lessc v1.1.13) to work to fail properly when lesscs fails, a minor change to one of the lessc files is required, this may be resolved in an upcoming version of the task and/or an upcoming version of lessc
- plessc v0.1.6 works well with the task, but has a rather annoying bug related to negative background positions.
Below is the original blog post.
Here’s some sample code for implementating an Apache Ant task for invoking lesscss:
import java.io.File;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.taskdefs.Execute;
import org.apache.tools.ant.taskdefs.MatchingTask;
public final class LesscssTask extends MatchingTask {
public LesscssTask() {
setIncludes("*.less");
}
private File _sourceDir;
private File _destDir;
public void setDir(File dir) {
_sourceDir = dir;
}
public void setToDir(File dir) {
_destDir = dir;
}
@Override
protected void execute() throws BuildException {
for (String inFileName : getDirectoryScanner(_sourceDir).getIncludedFiles()) {
File inFile = new File(_sourceDir, inFileName);
String outFileName = inFile.getName().replaceFirst("\\.less$", ".css");
String outFilePath = new File(_destDir, outFileName).getPath();
String inFilePath = inFile.getPath();
log("lesscss: From \"" + inFilePath + "\" to \"" + outFilePath + "\".");
Execute.runCommand(this, new String[] { "lessc", inFilePath, outFilePath });
}
}
}
After defining the lesscss task in your build file (using a taskdef) invoking it is as simple as:
<lesscss dir="src/htdocs" todir="build/htdocs" />