Oliver
Thanx for ur mail. I tried it, but it gives this error(see below),but it
works fine it I call build.xml from command line.
Regds
ERROR
Class org.apache.tools.ant.UnknownElement doesn't support the "name"
attribute.
at
org.apache.tools.ant.IntrospectionHelper.setAttribute(IntrospectionHelpe
r.java:422)
at
org.apache.tools.ant.ProjectHelper.configure(ProjectHelper.java:306)
at
org.apache.tools.ant.helper.ProjectHelperImpl$TaskHandler.init(ProjectHe
lperImpl.java:812)
at
org.apache.tools.ant.helper.ProjectHelperImpl$ProjectHandler.handleTaskd
ef(ProjectHelperImpl.java:534)
at
org.apache.tools.ant.helper.ProjectHelperImpl$ProjectHandler.startElemen
t(ProjectHelperImpl.java:506)
at
weblogic.apache.xerces.parsers.AbstractSAXParser.startElement(AbstractSA
XParser.java:419)
at
weblogic.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Ab
stractXMLDocumentParser.java:221)
at
weblogic.apache.xerces.impl.XMLNamespaceBinder.emptyElement(XMLNamespace
Binder.java:595)
at
weblogic.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElem
ent(XMLDocumentFragmentScannerImpl.java:747)
at
weblogic.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentConte
ntDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1477)
at
weblogic.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(
XMLDocumentFragmentScannerImpl.java:329)
at
weblogic.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguration.j
ava:525)
at
weblogic.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguration.j
ava:581)
at
weblogic.apache.xerces.parsers.XMLParser.parse(XMLParser.java:152)
at
weblogic.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser
.java:1175)
at
weblogic.xml.jaxp.WebLogicParser.parse(WebLogicParser.java:67)
at
weblogic.xml.jaxp.RegistryParser.parse(RegistryParser.java:144)
at
org.apache.tools.ant.helper.ProjectHelperImpl.parse(ProjectHelperImpl.ja
va:155)
at
org.apache.tools.ant.ProjectHelper.configureProject(ProjectHelper.java:1
17)
at TestBuild.main(TestBuild.java:16)
Exception in thread "main"
-----Original Message-----
From: Olivier Croisier [mailto:Olivier.Croisier@thales-is.com]
Sent: Wednesday, August 25, 2004 9:14 PM
To: Ant Users List
Subject: Re: calling ant from java program
> How can I call a ant task from java program?
> Regds
> Ashutosh
Here is some code I wrote.
It allows you to run any ant target from within a regular Java app.
You'll need ant-launcher.jar and ant.jar for this class to compile.
Enjoy :)
BTW, any comment/idea/debug/fix welcome !
import org.apache.tools.ant.*;
import java.io.*;
import java.util.*;
/**
* <PRE>
* This class is designed to call Ant targets from any Java
application.
* 1. Initialize a new Project by calling "init"
* 2. Feed Ant with some properties by calling "setProperties"
(optional)
* 3. Run an Ant target by calling "runTarget"
*
*
* Example :
*
* try
* {
* //init
* init("/home/me/build.xml","/home/me/");
* //properties
* HashMap m = new HashMap();
* m.put("event", "test");
* m.put("subject", "sujet java 3");
* m.put("message", "message java 3");
* setProperties(m, false);
* //run
* runTarget("test");
* } catch (Exception e) { e.printStackTrace(); }
* </PRE>
*
* @author croisier
*/
public class AntRunner
{
private Project project;
/**
* Initializes a new Ant Project.
* @param _buildFile The build File to use. If none is provided, it
will be defaulted to "build.xml".
* @param _baseDir The project's base directory. If none is
provided, will be defaulted to "." (the current directory).
* @throws Exception Exceptions are self-explanatory (read their
Message)
*/
public void init(String _buildFile, String _baseDir) throws
Exception
{
// Create a new project, and perform some default
initialization
project = new Project();
try { project.init(); }
catch (BuildException e)
{ throw new Exception("The default task list could not be
loaded."); }
// Set the base directory. If none is given, "." is used.
if (_baseDir == null) _baseDir=new String(".");
try { project.setBasedir(_baseDir); }
catch (BuildException e)
{ throw new Exception("The given basedir doesn't exist, or
isn't a directory."); }
// Parse the given buildfile. If none is given, "build.xml" is
used.
if (_buildFile == null) _buildFile=new String("build.xml");
try { ProjectHelper.getProjectHelper().parse(project, new
File(_buildFile)); }
catch (BuildException e)
{ throw new Exception("Configuration file "+_buildFile+" is
invalid, or cannot be read."); }
}
/**
* Sets the project's properties.
* May be called to set project-wide properties, or just before a
target call to set target-related properties only.
* @param _properties A map containing the properties' name/value
couples
* @param _overridable If set, the provided properties values may
be overriden by the config file's values
* @throws Exception Exceptions are self-explanatory (read their
Message)
*/
public void setProperties(Map _properties, boolean _overridable)
throws Exception
{
// Test if the project exists
if (project == null) throw new Exception("Properties cannot be
set because the project has not been initialized. Please call the 'init'
method first !");
// Property hashmap is null
if (_properties == null) throw new Exception("The provided
property map is null.");
// Loop through the property map
Set propertyNames = _properties.keySet();
Iterator iter = propertyNames.iterator();
while (iter.hasNext())
{
// Get the property's name and value
String propertyName = (String) iter.next();
String propertyValue = (String)
_properties.get(propertyName);
if (propertyValue == null) continue;
// Set the properties
if (_overridable) project.setProperty(propertyName,
propertyValue);
else project.setUserProperty(propertyName, propertyValue);
}
}
/**
* Runs the given Target.
* @param _target The name of the target to run. If null, the
project's default target will be used.
* @throws Exception Exceptions are self-explanatory (read their
Message)
*/
public void runTarget(String _target) throws Exception
{
// Test if the project exists
if (project == null) throw new Exception("No target can be
launched because the project has not been initialized. Please call the
'init' method first !");
// If no target is specified, run the default one.
if (_target == null) _target = project.getDefaultTarget();
// Run the target
try { project.executeTarget(_target); }
catch (BuildException e)
{ throw new Exception(e.getMessage()); }
}
}
--
CROISIER Olivier
Software Engineer
Thales IS - ANS
olivier.croisier@thales-is.com
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
For additional commands, e-mail: user-help@ant.apache.org
|