Hi Stephen,
I use another way to call ant from within a java program and it seems to
be working.
I call Launcher.main(args) (ant 1.6.4).
I don't know, if this way is recommended. It is only the result of some
"experiments".
Maybe your problem doesn't appear, if you use this calling mechanism.
Here is a code example:
######################
..
import org.apache.tools.ant.launch.Launcher;
..
// set new security manger to catch System.exit in
//org.apache.tools.ant.Main
// backup current security manager
SecurityManager osm = System.getSecurityManager();
// set special security manager
NoSystemExitSecurityManager nsm = new NoSystemExitSecurityManager();
System.setSecurityManager(nsm);
// start ant launcher
String args[] = {"-buildfile", buildFile,
"-logfile", antLogFile,
"startTarget"};
Launcher.main(args);
retVal =
Integer.parseInt(System.getProperty(NoSystemExitSecurityManager.exitStatusSystemProperty));
// restore security manager
System.setSecurityManager(osm);
######################
The special security manger is necessary to prevent, that the calling
java program exit then ant have finished its work.
I am no expert in using security managers and I don't know if restoring
it after calling ant is really necessary.
Maybe there is a nicer way to pass the return value too.
Nevertheless here is the code of NoSystemExitSecurityManager:
##############
import java.security.Permission;
public class NoSystemExitSecurityManager extends SecurityManager{
public static final String exitStatusSystemProperty = "exitStatus";
/** If a System.exit occurs, this security manger throws a
SecurityException and
stores the exit status into a system property
(->exitStatusSystemProperty). **/
public void checkExit(int status) {
System.setProperty(exitStatusSystemProperty,Integer.toString(status));
throw new SecurityException("Please ignore this exception!");
}
public void checkPermission(Permission perm) {
}
}
################
Regards
Frank
--
Frank Harnack
47269 Duisburg
Deutschland (Germany)
-----Ursprüngliche Nachricht-----
Von: Stephen Nesbitt [mailto:[EMAIL PROTECTED]
Gesendet: Mittwoch, 7. September 2005 04:25
An: user@ant.apache.org
Betreff: Calling Ant from Java program - Help with ProjectHelper class!
All:
I am trying to invoke an Ant build from within a java program. The build
system itself includes both:
- a namespace declarations (<project
xmlns:ivy="antlib:fr.jayasoft.ivy.ant") -
- an <import task.
From what I can gather, the basic sequence for invoking ant is the following:
project = new Project()
project.init()
helper = ProjectHelperxxx()
helper.parse( ant, File(<buildfile>))
The API docs reference 2 helpers - ProjectHelper2 and ProjectHelperImpl.
I can't get either to work.
If I use ProjectHelperImpl the parse fails with an "Unexpected attribute
"xmlns:ivy" error. If I remove the remove the namespace declaration the
parse
suceeds
If I use ProjectHelper2 then I avoid the namespace error, but the import
fails
with a null pointer exception and an unknown element error.
Anybody have any clues/hints on what I am missing?
Thanks!
-steve
--
Stephen Nesbitt
Senior Configuration Management Engineer
The Cobalt Group
[EMAIL PROTECTED]
x8271
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]