You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ant.apache.org by Tony Obermeit <to...@compuserve.com> on 2003/02/10 21:26:48 UTC

Re: Running build.xml located in jar file

Some time ago Erik replied to this post, in the skeleton he referenced, 
(listed below), the code loads the project from a file and runs it.  My 
question is this, I typically run ant specifying a propertyfile on the 
command line argument, how can I get the programmatic invocation of ant to 
recognize / load the properties from a file.  I can't specify the property 
file within the build script for a variety of reasons.

By the way, Erik, thanks for the work you put in to the "Java Development 
with Ant" book, it has been a great help!!!


>But it seems folks should be integrating with Ant by emulating what
>Main.main does rather than simply invoking it directly.  I've toyed with
>writing a servlet that ran Ant once upon a time.  I just dug up the code
>and here it is:
>
>      final Project project = new Project();
>      AntListener listener = new AntListener();
>      project.addBuildListener(listener);
>      File buildFile = new File(buildFile);
>
>      Throwable exception = null;
>      try {
>        project.fireBuildStarted();
>        project.init();
>        ProjectHelper.configureProject(project, buildFile);
>        project.executeTarget(project.getDefaultTarget());
>      }
>      catch (BuildException e) {
>        exception = e;
>      }
>      finally {
>        project.fireBuildFinished(exception);
>
>        Writer out = response.getWriter();
>        out.write(listener.getLog());
>      }
>
>AntListener is just a BuildListener implementing class that collects all
>the log messages for grabbing later (in the finally clause).  This is
>just a simple example, and one that probably needs lots of improvement
>to be solid, but its better than calling Main.main, IMO.
>
>     Erik

At 12:43 PM 12/01/2003 -0500, you wrote:
>To do it programmatically, I'd recommend you just emulate what Main.main() 
>does in your own class.  See a post I made providing a basic skeleton of 
>Java code to run an Ant project from a servlet from a couple of weeks ago 
>(or so).  You wouldn't do it as a java.io.File (at least not without 
>refactoring Ant).  You'd first pull a resource from a JAR (or URL) to a 
>local filesystem file, then run that through Ant's existing mechanisms.
>
>         Erik
>
>
>
>On Saturday, January 11, 2003, at 02:44  PM, Tony Obermeit wrote:
>>Thanks for the quick reply,
>>
>>Is it possible to do this programmatically?  I can then reference the 
>>build file and pass it to the ant.Main class as a java.io.File object?
>>
>>Tony
>>
>>At 05:32 AM 11/01/2003 -0500, you wrote:
>>>Currently Ant only runs a build file located on the filesystem.
>>>
>>>A workaround would be to ship with a minimal build.xml along with the 
>>>JAR which does an <unjar> to bootstrap and <ant> the primary build file, 
>>>although this is probably just as good as deploying the real build file.
>>>
>>>It would be nice for Ant to be modified to allow getting at build files 
>>>from an archive resource or from a URL.
>>>
>>>         Erik
>>>
>>>
>>>On Saturday, January 11, 2003, at 12:51  AM, Tony Obermeit wrote:
>>>>I have created a jar file that include the ant class files, a build.xml 
>>>>file and my application class files.
>>>>
>>>>I have not been able to get ant to find the build file within the jar 
>>>>file.  If I place the build file in the same directory as the jar file, 
>>>>and run ant as follows:
>>>>
>>>>java -cp application.jar org.apache.tools.ant.Main, ant runs the build 
>>>>file successfully.  The problem is when the build file is not in a 
>>>>directory, but instead is bundled within the jar file, then ant reports 
>>>>"Build file: build.xml does not exist, Build Failed".
>>>>
>>>>I'm using a single jar file (which includes ant class files, 
>>>>application class files and build.xml) so that my entire application, 
>>>>and it's setup scripts (build.xml) can be easily deployed.  For what 
>>>>it's worth, the build file contains sql tasks that I used to create 
>>>>database tables when running the application.
>>>>
>>>>Any help would be appreciated.
>>>>
>>>>Thanks
>>>>
>>>>Tony
>>>>
>>>>
>>>>
>>>>--
>>>>To unsubscribe, e-mail:
>>>><ma...@jakarta.apache.org>
>>>>For additional commands, e-mail: <ma...@jakarta.apache.org>
>>>
>>>
>>>--
>>>To unsubscribe, e-mail:
>>><ma...@jakarta.apache.org>
>>>For additional commands, e-mail: <ma...@jakarta.apache.org>
>>
>>
>>
>>
>>--
>>To unsubscribe, e-mail:
>><ma...@jakarta.apache.org>
>>For additional commands, e-mail: <ma...@jakarta.apache.org>
>>
>
>
>--
>To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
>For additional commands, e-mail: <ma...@jakarta.apache.org>




Re: Running build.xml located in jar file

Posted by Erik Hatcher <ja...@ehatchersolutions.com>.
On Monday, February 10, 2003, at 03:26  PM, Tony Obermeit wrote:
> Some time ago Erik replied to this post, in the skeleton he 
> referenced, (listed below), the code loads the project from a file and 
> runs it.  My question is this, I typically run ant specifying a 
> propertyfile on the command line argument, how can I get the 
> programmatic invocation of ant to recognize / load the properties from 
> a file.  I can't specify the property file within the build script for 
> a variety of reasons.
>

Have a look at Ant's Main.java and emulate that.  the -propertyfile 
handling is done there, and you are attempting to emulate what is done 
there to configure a Project.  You'll just have to use good ol' 
cut-and-paste inheritance on this one, I'm afraid.

> By the way, Erik, thanks for the work you put in to the "Java 
> Development with Ant" book, it has been a great help!!!

Thank you!

	Erik