[ 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)