ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
Subject Re: task with arbitrary classpath
Date Wed, 14 Jun 2000 01:06:21 GMT

any reason why you can't use two different class loaders? something like:

public static boolean sameUID(String classname, File oldJar, File newJar) {
     URL[] oldClasspath = new URL[] { oldJar.toURL() };
     URL[] newClasspath = new URL[] { newJar.toURL() };

     URLClassLoader oldLoader = new URLClassLoader(oldClasspath);
     URLClassLoader newLoader = new URLClassLoader(newClasspath);

     Class oldClass = oldLoader.loadClass(classname);
     Class newClass = newLoader.loadClass(classname);

     long oldUID = ObjectStreamClass.lookup(oldClass).getSerialVersionUID
     long newUID = ObjectStreamClass.lookup(newClass).getSerialVersionUID

     return oldUID = newUID;

As long as neither of the jars are in the original ant classpath, this
should work, I think. Otherwise, both class loaders will return the one in
the main classpath (they always check the system classpath first).

I haven't played with UID's much, so I could be way off...

                    "Jim Stiefel"                                                        
                    <jim.stiefel@        To:     <>   
          >           cc:                                          
                                         Subject:     task with arbitrary classpath      
                    04:52 PM                                                             
                    respond to                                                           

I am faced with an interesting problem I hope someone with more
experience with ant might be able to help me solve.  I want to define a
new ant task that will compare serial version UID's of freshly compiled
classes to the same class files in a known baseline jar so that my build
process can flag problems in serialization compatibility between our
development version and our last release version.

Retrieving the Serial Version UID is easy enough using The challenge is that the operation needs to
be run twice with different classpaths.  In one case,  the classpath
needs to include the baseline jar,  while in the second case,  it needs
to include the newly built jar.

Can someone suggest a simple or elegant way to accomplish this?


View raw message