Using jrunscript to create a build script
The JDK6 provides a new command jrunscript that enables to execute script shell in Java environment. By default, jrunscript uses javascript as scripting language and provides some useful default functions like cp, cd, cat, etc.
These global functions seem designed to ease the creation of build scripts, so i propose to show the basics of how to write such scripts.
First, the script must create the directory that will contain classes :
// project properties srcDir='src' classDir='classes' // target init mkdirs(classDir);
To run the script, just type
jrunscript yourScriptFileName.js in your shell
Then the script must compile the sources...
Weark, there is not function named
javac that compiles sources to classes !!
But this function is easy to write
using the package javax.tools
introduced by the JSR199 and available
in mustangjdk6.
In addition to javac, we need another function
that gather all the source files of some directory,
i've named it fileset in reference to the
<fileset> of Ant.
So compiling a source tree is done with the following lines in javascript :
function fileset(path,pattern) {
var set=new Array()
function callback(file) {
set.push(file)
}
find(path,pattern,callback)
return set
}
// target compile
echo('compile')
javac(fileset(srcDir,'.*\.java'),classDir)
you can notice that callback is some kind of
closure in javascript :)
The function javac is just a copy/paste of one example
that you can find in the comment of the class javax.tools.JavaCompilerTool :
function javac(fileset,destDir) {
compiler=javax.tools.ToolProvider.getSystemJavaCompiler()
fileManager=compiler.getStandardFileManager(null,null,null)
fileManager.setLocation(
javax.tools.StandardLocation.CLASS_OUTPUT,
java.util.Arrays.asList([new java.io.File(destDir)].valueOf()))
compilationUnit=fileManager.getJavaFileObjectsFromFiles(
java.util.Arrays.asList(fileset.valueOf()));
task=compiler.getTask(null,fileManager,
null,null,null,compilationUnit)
task.call()
fileManager.close()
}
We now have a basic script that compiles a java project,
ok, it doesn't have by example a way to declare dependency between
target like Ant but that's a good starting point.
The whole
script is available here
and if you want to know more about scripting and Java,
you can read the
A. Sundararajan's Weblog.
- Login or register to post comments
- Printer-friendly version
- forax's blog
- 1199 reads





