bodewig 2004/12/15 04:31:44
Modified: . Tag: ANT_16_BRANCH WHATSNEW
src/main/org/apache/tools/ant/taskdefs/rmic Tag:
ANT_16_BRANCH KaffeRmic.java
Log:
merge
Revision Changes Path
No revision
No revision
1.503.2.150 +3 -0 ant/WHATSNEW
Index: WHATSNEW
===================================================================
RCS file: /home/cvs/ant/WHATSNEW,v
retrieving revision 1.503.2.149
retrieving revision 1.503.2.150
diff -u -r1.503.2.149 -r1.503.2.150
--- WHATSNEW 14 Dec 2004 23:48:00 -0000 1.503.2.149
+++ WHATSNEW 15 Dec 2004 12:31:43 -0000 1.503.2.150
@@ -29,6 +29,9 @@
* Refactored Target invocation into org.apache.tools.ant.Executor
implementations. Bugzilla Reports 21421, 29248.
+* <rmic> now also supports Kaffe's rmic version shipping with Kaffe
+ 1.1.2 and above.
+
Fixed bugs:
-----------
No revision
No revision
1.11.2.5 +56 -15
ant/src/main/org/apache/tools/ant/taskdefs/rmic/KaffeRmic.java
Index: KaffeRmic.java
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/rmic/KaffeRmic.java,v
retrieving revision 1.11.2.4
retrieving revision 1.11.2.5
diff -u -r1.11.2.4 -r1.11.2.5
--- KaffeRmic.java 9 Mar 2004 17:01:54 -0000 1.11.2.4
+++ KaffeRmic.java 15 Dec 2004 12:31:44 -0000 1.11.2.5
@@ -29,33 +29,74 @@
* @since Ant 1.4
*/
public class KaffeRmic extends DefaultRmicAdapter {
+ public static final String RMIC_CLASSNAME = "gnu.java.rmi.rmic.RMIC";
+ // pre Kaffe 1.1.2
+ private static final String OLD_RMIC_CLASSNAME = "kaffe.rmi.rmic.RMIC";
+
+ /**
+ * the name of this adapter for users to select
+ */
+ public static final String COMPILER_NAME = "kaffe";
+
public boolean execute() throws BuildException {
getRmic().log("Using Kaffe rmic", Project.MSG_VERBOSE);
Commandline cmd = setupRmicCommand();
- try {
+ Class c = getRmicClass();
+ if (c == null) {
+ throw new BuildException("Cannot use Kaffe rmic, as it is not "
+ + "available. Neither "
+ + RMIC_CLASSNAME
+ + " nor "
+ + OLD_RMIC_CLASSNAME
+ + " have been found. "
+ + "A common solution is to "
+ + "set the environment variable "
+ + "JAVA_HOME or CLASSPATH.",
+ getRmic().getLocation());
+ }
- Class c = Class.forName("kaffe.rmi.rmic.RMIC");
+ try {
Constructor cons = c.getConstructor(new Class[]
{String[].class});
Object rmic = cons.newInstance(new Object[]
{cmd.getArguments()});
- Method doRmic = c.getMethod("run", null);
- Boolean ok = (Boolean) doRmic.invoke(rmic, null);
+ Method doRmic = c.getMethod("run", (Class[]) null);
+ Boolean ok = (Boolean) doRmic.invoke(rmic, (Object[]) null);
return ok.booleanValue();
- } catch (ClassNotFoundException ex) {
- throw new BuildException("Cannot use Kaffe rmic, as it is not "
- + "available. A common solution is to "
- + "set the environment variable "
- + "JAVA_HOME or CLASSPATH.",
- getRmic().getLocation());
+ } catch (BuildException ex) {
+ //rethrow
+ throw ex;
} catch (Exception ex) {
- if (ex instanceof BuildException) {
- throw (BuildException) ex;
- } else {
- throw new BuildException("Error starting Kaffe rmic: ",
- ex, getRmic().getLocation());
+ //wrap
+ throw new BuildException("Error starting Kaffe rmic: ",
+ ex, getRmic().getLocation());
+ }
+ }
+
+ /**
+ * test for kaffe being on the system
+ * @return true if kaffe is on the current classpath
+ */
+ public static boolean isAvailable() {
+ return getRmicClass() != null;
+ }
+
+ /**
+ * tries to load Kaffe RMIC and falls back to the older class name
+ * if necessary.
+ *
+ * @return null if neither class can get loaded.
+ */
+ private static Class getRmicClass() {
+ try {
+ return Class.forName(RMIC_CLASSNAME);
+ } catch (ClassNotFoundException cnfe) {
+ try {
+ return Class.forName(OLD_RMIC_CLASSNAME);
+ } catch (ClassNotFoundException cnfe2) {
}
}
+ return null;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]