[Info-vax] Versioning fun
Arne Vajhøj
arne at vajhoej.dk
Wed Mar 27 11:03:57 EDT 2024
On 3/27/2024 10:30 AM, Single Stage to Orbit wrote:
> On Wed, 2024-03-27 at 09:11 -0400, Arne Vajhøj wrote:
>> $ java "TestX"
>> Technically I am a X, but I am version 1
>> Technically I am a X, but I am version 2
>
> It is vital to delete the X.class files otherwise it will load that
> instead of the jar files.
Yes. I should probably have mentioned that explicit.
Java class loaders are hierarchical and searched top down. The
default class loader with default classpath of current directory
is searched before the jar files in the special class loaders.
$ type Dump.java
import java.io.File;
import java.net.URI;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.List;
import java.util.ArrayList;
public class Dump {
private static void dump(String lbl, ClassLoader cl) {
List<ClassLoader> lst = new ArrayList<ClassLoader>();
ClassLoader cl1 = cl;
do {
lst.add(cl1);
cl1 = cl1.getParent();
} while(cl1 != null);
System.out.printf("Class search path for %s:\n", lbl);
for(int i = lst.size() - 1; i >= 0; i--) {
System.out.printf(" %d - %s", lst.size() - i,
lst.get(i).getClass().getName());
if(lst.get(i) instanceof URLClassLoader) {
System.out.print(" -");
for(URL url : ((URLClassLoader)lst.get(i)).getURLs()) {
System.out.printf(" %s", url);
}
}
System.out.println();
}
}
public static void main(String[] args) throws Exception {
dump("Default", Dump.class.getClassLoader());
ClassLoader v1 = new URLClassLoader(new URL[] { (new
File("v1.jar")).toURI().toURL() });
dump("V1 library", v1);
ClassLoader v2 = new URLClassLoader(new URL[] { (new
File("v2.jar")).toURI().toURL() });
dump("V2 library", v2);
}
}
$ javac Dump.java
$ java Dump
Class search path for Default:
1 - sun.misc.Launcher$ExtClassLoader -
file:/DISK$X86SYS/SYS0/SYSCOMMON/openjdk$80/jre/lib/ext/cldrdata.jar
file:/DISK$X86SYS/SYS0
/SYSCOMMON/openjdk$80/jre/lib/ext/dnsns.jar
file:/DISK$X86SYS/SYS0/SYSCOMMON/openjdk$80/jre/lib/ext/jaccess.jar
file:/DISK$X86SYS/SY
S0/SYSCOMMON/openjdk$80/jre/lib/ext/localedata.jar
file:/DISK$X86SYS/SYS0/SYSCOMMON/openjdk$80/jre/lib/ext/nashorn.jar
file:/DISK$X8
6SYS/SYS0/SYSCOMMON/openjdk$80/jre/lib/ext/sunec.jar
file:/DISK$X86SYS/SYS0/SYSCOMMON/openjdk$80/jre/lib/ext/sunjce_provider.jar
fil
e:/DISK$X86SYS/SYS0/SYSCOMMON/openjdk$80/jre/lib/ext/sunpkcs11.jar
file:/DISK$X86SYS/SYS0/SYSCOMMON/openjdk$80/jre/lib/ext/zipfs.jar
2 - sun.misc.Launcher$AppClassLoader - file:/DISK2/ARNE/
Class search path for V1 library:
1 - sun.misc.Launcher$ExtClassLoader -
file:/DISK$X86SYS/SYS0/SYSCOMMON/openjdk$80/jre/lib/ext/cldrdata.jar
file:/DISK$X86SYS/SYS0
/SYSCOMMON/openjdk$80/jre/lib/ext/dnsns.jar
file:/DISK$X86SYS/SYS0/SYSCOMMON/openjdk$80/jre/lib/ext/jaccess.jar
file:/DISK$X86SYS/SY
S0/SYSCOMMON/openjdk$80/jre/lib/ext/localedata.jar
file:/DISK$X86SYS/SYS0/SYSCOMMON/openjdk$80/jre/lib/ext/nashorn.jar
file:/DISK$X8
6SYS/SYS0/SYSCOMMON/openjdk$80/jre/lib/ext/sunec.jar
file:/DISK$X86SYS/SYS0/SYSCOMMON/openjdk$80/jre/lib/ext/sunjce_provider.jar
fil
e:/DISK$X86SYS/SYS0/SYSCOMMON/openjdk$80/jre/lib/ext/sunpkcs11.jar
file:/DISK$X86SYS/SYS0/SYSCOMMON/openjdk$80/jre/lib/ext/zipfs.jar
2 - sun.misc.Launcher$AppClassLoader - file:/DISK2/ARNE/
3 - java.net.URLClassLoader - file:/DISK2/ARNE/v1.jar
Class search path for V2 library:
1 - sun.misc.Launcher$ExtClassLoader -
file:/DISK$X86SYS/SYS0/SYSCOMMON/openjdk$80/jre/lib/ext/cldrdata.jar
file:/DISK$X86SYS/SYS0
/SYSCOMMON/openjdk$80/jre/lib/ext/dnsns.jar
file:/DISK$X86SYS/SYS0/SYSCOMMON/openjdk$80/jre/lib/ext/jaccess.jar
file:/DISK$X86SYS/SY
S0/SYSCOMMON/openjdk$80/jre/lib/ext/localedata.jar
file:/DISK$X86SYS/SYS0/SYSCOMMON/openjdk$80/jre/lib/ext/nashorn.jar
file:/DISK$X8
6SYS/SYS0/SYSCOMMON/openjdk$80/jre/lib/ext/sunec.jar
file:/DISK$X86SYS/SYS0/SYSCOMMON/openjdk$80/jre/lib/ext/sunjce_provider.jar
fil
e:/DISK$X86SYS/SYS0/SYSCOMMON/openjdk$80/jre/lib/ext/sunpkcs11.jar
file:/DISK$X86SYS/SYS0/SYSCOMMON/openjdk$80/jre/lib/ext/zipfs.jar
2 - sun.misc.Launcher$AppClassLoader - file:/DISK2/ARNE/
3 - java.net.URLClassLoader - file:/DISK2/ARNE/v2.jar
Arne
More information about the Info-vax
mailing list