ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jonathan Simon <jonathan_s_si...@yahoo.com>
Subject Ant scripting from Jython.
Date Thu, 12 Jun 2003 20:20:35 GMT
Hello all, 

Ive been working alot with the idea of scripting languages and how they fit
into the community (especially Java scripting languages). I started to look at
when XML is misused and when something like Jython might be a better idea. The
end result was an article on the new java.net site that you can find here:

http://today.java.net/pub/a/today/2003/06/10/jython.html

The last example is about ANT. I spoke to Erik (hatcher) and James (duncan
davidson) about the whole abuse of XML in ANT proper not to mention all of the
stuff on the ant-contrib project. Essentially the idea is that you can use XML
if you are doing straight ahead stuff. But if you are going to do things like
use for loops and write conditionals, you would be better off using a real
scripting language for several reasons. Mainly that the sytax is easier to read
and write and you dont have to implement code to support custom code structures
in XML. 

Cool. That said, I went to write a fictional example of how you could replace
the XML in ANT and run it straight from Jython. I was thinking about a huge
development effort to write some "glue" between AND and Jython. Then I realized
that since its Jython and Jython can talk to Java objects and ANT has
underlying Java objects there IS NO GLUE CODE!!! Here is a basic out of the box
working example calling ANT from Jython: 


project = Project()
copyTask = Copy()
copyTask.project = project
copyTask.file = File("C:\\java\\jython_ant\\src\HelloJython.java")
copyTask.todir = File("C:\\java\\jython_ant\\temp")
copyTask.execute()

Now thats kind of ugly. You have to know alot of the ANT internals to get this
to work. Also, theres too many ant calls muddying up the script. So you can
make a helper method like this: 

def copyWrapper(file, toDir, project):
    copyTask = Copy()
    copyTask.project = project
    copyTask.file = File(file)
    copyTask.todir = File(toDir)
    copyTask.execute()

Then you can call it from your Jython and script(!!!) like this: 

copyWrapper("C:\\java\\jython_ant\\src\HelloJython.java",
"C:\\java\\jython_ant\\temp", project)

This would be even cleaner if you abstract out the variables/properties into
XML.

The point is that calling ANT from Jython is much easier than I initially
thought (you dont have to write ant translation stuff) but harder than I
secondly thought (you have to write some wrappers or something somewhere to
make the code legible). 

So, since I am a long time ANT user, but only a recent ANT developer, Im
looking for some help. I would like to get interested folks together and figure
out the best combination of ANT classes to extend or reimplement and Jython
code to make this Jython stuff a woprking reality and see where it goes. 

Just to finish off, what I really like about this approach is the whole
community aspect. The Jython stuff will be using the same codebase. Using the
same ANT installation you can call ANT from XML or Jython. Additionally, if we
do this right, well be able to plug in any Java scrpting language of choice
(like JRuby). Then, the whole argument of the use of XML goes away and the
purists and iconoclasts can all have their way-- without forking ANT. 

So there you have it. Sorry for the long rant. Lets see what kind of momentum
we can get on this. 

-jonathan



















=====
Jonathan Simon
Home - 732.777.0377  <----------- New!!!
Work - 646.674.2060
Cell - 732.718.8844
Music - www.mp3.com/jonathan_simon

__________________________________
Do you Yahoo!?
Yahoo! Calendar - Free online calendar with sync to Outlook(TM).
http://calendar.yahoo.com

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org


Mime
View raw message