Author: peterreilly
Date: Fri Dec 29 08:51:56 2006
New Revision: 491045
URL: http://svn.apache.org/viewvc?view=rev&rev=491045
Log:
Check if classpath used with forked junit contains multi versions of ant
Modified:
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
Modified:
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java?view=diff&rev=491045&r1=491044&r2=491045
==============================================================================
---
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
(original)
+++
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
Fri Dec 29 08:51:56 2006
@@ -28,6 +28,7 @@
import java.io.OutputStream;
import java.io.PrintWriter;
import java.lang.reflect.Constructor;
+import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Enumeration;
@@ -126,6 +127,8 @@
*/
public class JUnitTask extends Task {
+ private static final String LINE_SEP
+ = System.getProperty("line.separator");
private static final String CLASSPATH = "CLASSPATH=";
private CommandlineJava commandline;
private Vector tests = new Vector();
@@ -159,6 +162,9 @@
private boolean splitJunit = false;
private JUnitTaskMirror delegate;
+ /** A boolean on whether to get the forked path for ant classes */
+ private boolean forkedPathChecked = false;
+
// Attributes for basetest
private boolean haltOnError = false;
private boolean haltOnFail = false;
@@ -1016,6 +1022,9 @@
execute.setEnvironment(environment);
log(cmd.describeCommand(), Project.MSG_VERBOSE);
+
+ checkForkedPath(cmd);
+
TestResultHolder result = new TestResultHolder();
try {
result.exitCode = execute.execute();
@@ -1058,6 +1067,42 @@
}
return result;
+ }
+
+ /**
+ * Check the path for multiple different versions of
+ * ant.
+ */
+ private void checkForkedPath(CommandlineJava cmd) {
+ if (forkedPathChecked) {
+ return;
+ }
+ forkedPathChecked = true;
+ if (!cmd.haveClasspath()) {
+ return;
+ }
+ AntClassLoader loader = new AntClassLoader(
+ getProject(), cmd.createClasspath(getProject()));
+ String projectResourceName = LoaderUtils.classNameToResource(
+ Project.class.getName());
+ URL previous = null;
+ try {
+ for (Enumeration e = loader.getResources(projectResourceName);
+ e.hasMoreElements();) {
+ URL current = (URL) e.nextElement();
+ if (previous != null && !current.equals(previous)) {
+ log("WARNING: multiple versions of ant detected "
+ + "in path for junit "
+ + LINE_SEP + " " + previous
+ + LINE_SEP + " and " + current,
+ Project.MSG_WARN);
+ return;
+ }
+ previous = current;
+ }
+ } catch (Exception ex) {
+ // Ignore exception
+ }
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]