You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by bu...@apache.org on 2002/02/02 01:45:03 UTC

DO NOT REPLY [Bug 5997] - Binary incompatibility between ANT 1.4.1 & 1.3

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=5997>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=5997

Binary incompatibility between ANT 1.4.1 & 1.3

umagesh@apache.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |WONTFIX



------- Additional Comments From umagesh@apache.org  2002-02-02 00:45 -------
You are only exposing a fundamental Java Machinery problem.  Let me simplify
the problem so that you understand the issue.  Create the following classes
in individual java files:

public abstract class test2 {
    public void x() {
    }
}

public abstract class test1 extends test2 {
}

public class test1Caller extends test1 {
    public static void main( String args[] ) {
        try {
            test1Caller t = (test1Caller) 
                Class.forName("test1Caller").newInstance();
            t.x();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Now compile test1Caller.java and run it - you will have no problems.

Now change test1.java to the following:

public abstract class test1 {
    public void x() {
    }
}

Compile test1.java *alone*.

Run test1Caller

You will get an exception thrown. Recompile test1Caller.java and everything 
will be fine.

Now change test1.java back to 
public abstract class test1 extends test2 {
}

and compile test1.java *only* and run test1Caller.  You will not have any 
problems.

So, what is the lesson learnt?  Expecting that a generated class is always 
*backwards-ported* is a mistake.

So, coming to your problem.  Ship your task by compiling it against Ant 1.3.  
It will work on Ant >= 1.3 versions.  We strive to maintain backwards 
*compatibility* and not backwards *portability*, and neither should we be, IMHO.
If you compile it using Ant 1.4 classes and expect it to work on Ant 1.3 too, 
then you are making a fundamental Java mis-judgement ;-(

I am going to close this as WONTFIX because having to enforce backwards 
portability will seriously impact our ability to improve the product as such.
Sorry.

Cheers,
Magesh

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>