Yes for antwrap. And if you do anything with the classpath, do it before you define anything.
On Wed, Sep 8, 2010 at 22:38, Peter Donald <[email protected]> wrote: > > Given this buildfile fragment > > > > desc "TestApp" > > define "TestApp" do > > task :buildme do > > Java.classpath << artifact("org.apache.ant:ant-nodeps:jar:1.8.0") > > Java.classpath << artifact("org.apache.ant:ant-junit:jar:1.8.0") > > Java.org.apache.tools.ant.Main.main(['-f', _("build.xml"), > 'default']) > > end > > compile :buildme > > end > > > > Any idea why the build succeeds in the TestApp directory, but not two > levels up in the trunk? > > You have hit one one of the most annoying things about buildr. > Java.classpath will add to the classpath if Java.init has not be > called and Java.init is called the first time someone wants to > instantiate a java class. So whether a Java.classpath succeeds in > adding a file to classpath is completely dependent on the extension > you installed, the files you require and the nesting level of projects > etc. It also seems to randomly change between releases. > > The take away from this is that you should never use it if you want a > reproducible build. I experimented with using the Java module to > instantiate a URLClassLoader and adding to that but in the end I ended > up deciding that it was easier to just use command line apps. > > However if what you want to do is interact with ant I would recommend > using the antwrap feature of buildr. You can see examples of it in the > addon directory or look at some documentation at > http://antwrap.rubyforge.org/ > > > -- > Cheers, > > Peter Donald >
