diff --git a/docs/manual/OptionalTasks/depend.html b/docs/manual/OptionalTasks/depend.html
index 044858a0a..441a8b251 100644
--- a/docs/manual/OptionalTasks/depend.html
+++ b/docs/manual/OptionalTasks/depend.html
@@ -147,6 +147,12 @@ classes. Defaults to false
check dependencies
No |
+
+ warnOnRmiStubs |
+ Flag to disable warnings about files that look like rmic generated stub/skeleton
+ classes, and which have no .java source. Useful when doing rmi development. |
+ No, default=true |
+
Parameters specified as nested elements
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/depend/Depend.java b/src/main/org/apache/tools/ant/taskdefs/optional/depend/Depend.java
index eac1d0357..386cd2500 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/Depend.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/depend/Depend.java
@@ -31,6 +31,8 @@ import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.MatchingTask;
+import org.apache.tools.ant.taskdefs.rmic.DefaultRmicAdapter;
+import org.apache.tools.ant.taskdefs.rmic.WLRmic;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.Reference;
import org.apache.tools.ant.util.depend.DependencyAnalyzer;
@@ -95,6 +97,11 @@ public class Depend extends MatchingTask {
*/
private boolean closure = false;
+ /**
+ * flag to enable warning if we encounter RMI stubs
+ */
+ private boolean warnOnRmiStubs=true;
+
/**
* Flag which controls whether the reversed dependencies should be
* dumped to the log
@@ -154,6 +161,16 @@ public class Depend extends MatchingTask {
createClasspath().setRefid(r);
}
+ /**
+ * flag to set to true if you want dependency issues with RMI
+ * stubs to appear at warning level.
+ * @param warnOnRmiStubs
+ * @since Ant1.7
+ */
+ public void setWarnOnRmiStubs(boolean warnOnRmiStubs) {
+ this.warnOnRmiStubs = warnOnRmiStubs;
+ }
+
/**
* Read the dependencies from cache file
*
@@ -326,10 +343,8 @@ public class Depend extends MatchingTask {
while (depEnum.hasMoreElements()) {
dependencyList.addElement(depEnum.nextElement());
}
- if (dependencyList != null) {
- cacheDirty = true;
- dependencyMap.put(info.className, dependencyList);
- }
+ cacheDirty = true;
+ dependencyMap.put(info.className, dependencyList);
}
// This class depends on each class in the dependency list. For each
@@ -454,14 +469,7 @@ public class Depend extends MatchingTask {
}
if (affectedClassInfo.sourceFile == null) {
- if (!affectedClassInfo.isUserWarned) {
- log("The class " + affectedClass + " in file "
- + affectedClassInfo.absoluteFile.getPath()
- + " is out of date due to " + className
- + " but has not been deleted because its source file"
- + " could not be determined", Project.MSG_WARN);
- affectedClassInfo.isUserWarned = true;
- }
+ warnOutOfDateButNotDeleted(affectedClassInfo, affectedClass, className);
continue;
}
@@ -503,6 +511,54 @@ public class Depend extends MatchingTask {
return count;
}
+ /**
+ * warn when a class is out of date, but not deleted as its source is unknown.
+ * MSG_WARN is the normal level, but we downgrade to MSG_VERBOSE for RMI files
+ * if {@link #warnOnRmiStubs is false}
+ * @param affectedClassInfo info about the affectd class
+ * @param affectedClass the name of the affected .class file
+ * @param className the file that is triggering the out of dateness
+ */
+ private void warnOutOfDateButNotDeleted(
+ ClassFileInfo affectedClassInfo, String affectedClass,
+ String className) {
+ if (affectedClassInfo.isUserWarned) {
+ return;
+ }
+ int level = Project.MSG_WARN;
+ if(!warnOnRmiStubs) {
+ //downgrade warnings on RMI stublike classes, as they are generated
+ //by rmic, so there is no need to tell the user that their source is
+ //missing.
+ if(isRmiStub(affectedClass, className)) {
+ level=Project.MSG_VERBOSE;
+ }
+ }
+ log("The class " + affectedClass + " in file "
+ + affectedClassInfo.absoluteFile.getPath()
+ + " is out of date due to " + className
+ + " but has not been deleted because its source file"
+ + " could not be determined", level);
+ affectedClassInfo.isUserWarned = true;
+ }
+
+ /**
+ * test for being an RMI stub
+ * @param affectedClass
+ * @param className
+ * @return
+ */
+ private boolean isRmiStub(String affectedClass, String className) {
+ return isStub(affectedClass,className, DefaultRmicAdapter.RMI_STUB_SUFFIX)
+ || isStub(affectedClass, className, DefaultRmicAdapter.RMI_SKEL_SUFFIX)
+ || isStub(affectedClass, className, WLRmic.RMI_STUB_SUFFIX)
+ || isStub(affectedClass, className, WLRmic.RMI_SKEL_SUFFIX);
+ }
+
+ private boolean isStub(String affectedClass,String baseClass,String suffix) {
+ return (baseClass+suffix).equals(affectedClass);
+ }
+
/**
* Dump the dependency information loaded from the classes to the Ant log
*/
@@ -548,7 +604,7 @@ public class Depend extends MatchingTask {
private void determineOutOfDateClasses() {
outOfDateClasses = new Hashtable();
for (int i = 0; i < srcPathList.length; i++) {
- File srcDir = (File) getProject().resolveFile(srcPathList[i]);
+ File srcDir = getProject().resolveFile(srcPathList[i]);
if (srcDir.exists()) {
DirectoryScanner ds = this.getDirectoryScanner(srcDir);
String[] files = ds.getIncludedFiles();
diff --git a/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java b/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java
index 4eea5cec7..4fa6bf596 100644
--- a/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java
+++ b/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java
@@ -25,7 +25,6 @@ import org.apache.tools.ant.taskdefs.Rmic;
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.util.FileNameMapper;
-import org.apache.tools.ant.util.JavaEnvUtils;
/**
* This is the default implementation for the RmicAdapter interface.
@@ -39,6 +38,9 @@ public abstract class DefaultRmicAdapter implements RmicAdapter {
private Rmic attributes;
private FileNameMapper mapper;
private static final Random rand = new Random();
+ public static final String RMI_STUB_SUFFIX = "_Stub";
+ public static final String RMI_SKEL_SUFFIX = "_Skel";
+ public static final String RMI_TIE_SUFFIX = "_Tie";
public DefaultRmicAdapter() {
}
@@ -53,15 +55,15 @@ public abstract class DefaultRmicAdapter implements RmicAdapter {
}
protected String getStubClassSuffix() {
- return "_Stub";
+ return RMI_STUB_SUFFIX;
}
protected String getSkelClassSuffix() {
- return "_Skel";
+ return RMI_SKEL_SUFFIX;
}
protected String getTieClassSuffix() {
- return "_Tie";
+ return RMI_TIE_SUFFIX;
}
/**
diff --git a/src/main/org/apache/tools/ant/taskdefs/rmic/ForkingSunRmic.java b/src/main/org/apache/tools/ant/taskdefs/rmic/ForkingSunRmic.java
index 6f90e1f5f..0b70e63cf 100644
--- a/src/main/org/apache/tools/ant/taskdefs/rmic/ForkingSunRmic.java
+++ b/src/main/org/apache/tools/ant/taskdefs/rmic/ForkingSunRmic.java
@@ -23,8 +23,8 @@ package org.apache.tools.ant.taskdefs.rmic;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
+import org.apache.tools.ant.util.JavaEnvUtils;
import org.apache.tools.ant.taskdefs.Rmic;
-import org.apache.tools.ant.taskdefs.Java;
import org.apache.tools.ant.taskdefs.Execute;
import org.apache.tools.ant.taskdefs.LogStreamHandler;
import org.apache.tools.ant.types.Commandline;
@@ -56,7 +56,7 @@ public class ForkingSunRmic extends DefaultRmicAdapter {
Commandline cmd = setupRmicCommand();
Project project=owner.getProject();
//rely on RMIC being on the path
- cmd.setExecutable(SunRmic.RMIC_EXECUTABLE);
+ cmd.setExecutable(JavaEnvUtils.getJdkExecutable(SunRmic.RMIC_EXECUTABLE));
//set up the args
String[] args=cmd.getCommandline();
diff --git a/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java b/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java
index 3c80c493a..17215b5c3 100644
--- a/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java
+++ b/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java
@@ -40,6 +40,8 @@ public class WLRmic extends DefaultRmicAdapter {
+ "set the environment variable "
+ "CLASSPATH.";
public static final String ERROR_WLRMIC_FAILED = "Error starting WebLogic rmic: ";
+ public static final String RMI_STUB_SUFFIX = "_WLStub";
+ public static final String RMI_SKEL_SUFFIX = "_WLSkel";
public boolean execute() throws BuildException {
getRmic().log("Using WebLogic rmic", Project.MSG_VERBOSE);
@@ -80,13 +82,13 @@ public class WLRmic extends DefaultRmicAdapter {
* Get the suffix for the rmic stub classes
*/
public String getStubClassSuffix() {
- return "_WLStub";
+ return RMI_STUB_SUFFIX;
}
/**
* Get the suffix for the rmic skeleton classes
*/
public String getSkelClassSuffix() {
- return "_WLSkel";
+ return RMI_SKEL_SUFFIX;
}
}