Found a good explenation for my error here:
http://www.jspwiki.org/wiki/A2AClassCastException
Building a servlet that invokes Ant,
one should not use the Launcher.java in favor of the Ant class Project.java:
This is my invoker - assuming ant.jar, ant-launcher.jar and e.g.
ant-trax.jar in WEB-INF/lib:
private void execAnt( Properties properties, String buildFile ) {
try {
// create a project
final Project project = new Project();
// Add the default listener - a simple Logger extending
BuildLogger
project.addBuildListener( new AntLogger() );
// set the classloader
project.setCoreLoader(this.getClass().getClassLoader());
// set the input handler, don't know if this is really needed
project.setInputHandler(new DefaultInputHandler());
// init
project.init();
// set the version and other properties
project.setUserProperty(MagicNames.ANT_VERSION, "unknown" );
for( Object property: properties.keySet() )
project.setUserProperty( (String)property,
properties.getProperty( (String)property) );
// set the path to the build file
project.setUserProperty(MagicNames.ANT_FILE, buildFile );
// configure the project
ProjectHelper.configureProject(project, new File( buildFile) );
// set the target
Vector<String> targets = new Vector<String>();
targets.addElement(project.getDefaultTarget());
// execute the project
project.executeTargets(targets);
} catch( Throwable t ) { log.error( FAILED, t );
} finally {}
}
Rolf Schumacher wrote:
Dear Tomcat professionals,
I tried to automate some installation over the Web
I got a class cast exception when trying to launch Ant from a servlet.
The program works fine if I execute it from the command line.
In a servlet under Tomcat it causes a
java.lang.ClassCastException: org.apache.tools.ant.Main
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:275)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:96)
I looked up line 275 in Launcher.java:
270 URLClassLoader loader = new URLClassLoader(jars);
271 Thread.currentThread().setContextClassLoader(loader);
272 Class mainClass = null;
273 try {
274 mainClass = loader.loadClass(MAIN_CLASS);
275 AntMain main = (AntMain) mainClass.newInstance();
276 main.startAnt(newArgs, null, null);
Do you have an idea why the loader does load something different
that usually can be casted to AntMain?
Any help appreaciated.
Rolf
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]