[
https://issues.apache.org/jira/browse/MANTTASKS-254?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Robert Scholte closed MANTTASKS-254.
------------------------------------
Resolution: Won't Fix
Assignee: Robert Scholte
This is a retired project, issue won't be fixed.
> org.apache.tools.ant.taskdefs.ExecuteJava$run method should throw
> BuildException
> --------------------------------------------------------------------------------
>
> Key: MANTTASKS-254
> URL: https://issues.apache.org/jira/browse/MANTTASKS-254
> Project: Maven Ant Tasks (RETIRED)
> Issue Type: Bug
> Components: deploy task
> Affects Versions: 2.0.2
> Environment: JDK 1.8
> ANT 2.0.2
> Reporter: Martin Gainty
> Assignee: Robert Scholte
> Priority: Major
> Attachments: ExecuteJava.java
>
> Original Estimate: 168h
> Remaining Estimate: 168h
>
> {code}
> /**
> * Execute the Java class against the specified Ant Project.
> * @param project the Project to use.
> * @throws BuildException on error.
> */
> public void execute(Project project) throws BuildException {
> final String classname = javaCommand.getExecutable();
> AntClassLoader loader = null;
> try {
> if (sysProperties != null) {
> sysProperties.setSystem();
> }
> Class<?> target = null;
> try {
> if (classpath == null) {
> target = Class.forName(classname);
> } else {
> loader = project.createClassLoader(classpath);
> loader.setParent(project.getCoreLoader());
> loader.setParentFirst(false);
> loader.addJavaLibraries();
> loader.setIsolated(true);
> loader.setThreadContextLoader();
> loader.forceLoadClass(classname);
> target = Class.forName(classname, true, loader);
> }
> } catch (ClassNotFoundException e) {
> throw new BuildException("Could not find " + classname + "."
> + " Make sure you have it in your"
> + " classpath");
> }
> main = target.getMethod("main", new Class[] {String[].class});
> if (main == null) {
> throw new BuildException("Could not find main() method in "
> + classname);
> }
> if ((main.getModifiers() & Modifier.STATIC) == 0) {
> throw new BuildException("main() method in " + classname
> + " is not declared static");
> }
> if (timeout == null) {
> run();
> } else {
> thread = new Thread(this, "ExecuteJava");
> Task currentThreadTask
> = project.getThreadTask(Thread.currentThread());
> // XXX is the following really necessary? it is in the same
> thread group...
> project.registerThreadTask(thread, currentThreadTask);
> // if we run into a timeout, the run-away thread shall not
> // make the VM run forever - if no timeout occurs, Ant's
> // main thread will still be there to let the new thread
> // finish
> thread.setDaemon(true);
> Watchdog w = new Watchdog(timeout.longValue());
> w.addTimeoutObserver(this);
> synchronized (this) {
> thread.start();
> w.start();
> try {
> wait();
> } catch (InterruptedException e) {
> // ignore
> }
> if (timedOut) {
> project.log("Timeout: sub-process interrupted",
> Project.MSG_WARN);
> } else {
> thread = null;
> w.stop();
> }
> }
> }
> if (caught != null) {
> throw caught;
> }
> } catch (BuildException e) {
> throw e;
> } catch (SecurityException e) {
> throw e;
> } catch (ThreadDeath e) {
> // XXX could perhaps also call thread.stop(); not sure if anyone
> cares
> throw e;
> } catch (Throwable e) {
> throw new BuildException(e);
> } finally {
> if (loader != null) {
> loader.resetThreadContextLoader();
> loader.cleanup();
> loader = null;
> }
> if (sysProperties != null) {
> sysProperties.restoreSystem();
> }
> }
> }
> /**
> * Run this ExecuteJava in a Thread.
> * @since Ant 1.5
> * TODO: run() should throw BuildException for any compile error
> */
> public void run() {
> final Object[] argument = {javaCommand.getArguments()};
> try {
> if (perm != null) {
> perm.setSecurityManager();
> }
> main.invoke(null, argument);
> } catch (InvocationTargetException e) {
> Throwable t = e.getTargetException();
> if (!(t instanceof InterruptedException)) {
> caught = t;
> } /* else { swallow, probably due to timeout } */
> } catch (Throwable t) {
> caught = t;
> } finally {
> if (perm != null) {
> perm.restoreSecurityManager();
> }
> synchronized (this) {
> notifyAll();
> }
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)