Ich habe ein Maven-Projekt, das eine Abhängigkeit von einem Jar "Probe" der Version "2.0" hat. Die "Probe" Jar der Version "2.0" enthält eine Enum mit dem Namen "SampleEnum". Die SampleEnum in "2.0" Version sieht wie untenWie laden Sie zwei Versionen einer Klasse aus zwei verschiedenen Versionen von Jars in einem Java-Maven-Projekt?
public enum SampleEnum {
"HERBIVORES",
"CARNIVORES",
"OMNIVORES"
}
ich die "SampleEnum" Klasse von "Probe" Glas-Version "1.0" in dem oben erwähnten Maven Java-Projekt laden möge. Die SampleEnum-Klasse in "1.0" Version sieht etwas wie unten.
public enum SampleEnum {
"HERBIVORES",
"CARNIVORES"
}
verwendete ich den folgenden Code, um die Klasse zu laden:
public class Test
{
public static void main(String args[]) {
try {
URLClassLoader loader1 = new URLClassLoader(new URL[] {new File("sample-1.0.jar").toURL()}, Thread.currentThread().getContextClassLoader());
Class<?> c1 = loader1.loadClass("SampleEnum");
for (Object o : c1.getEnumConstants()) {
System.out.println(o);
}
}
catch(Exception ex)
{
System.err.println(ex.getMessage());
}
}
}
die tatsächliche Ausgabe des obigen Programms ist:
HERBIVORES CARNIVORES ALLESFRESSER
Wie ich geladen haben die Klasse von "Probe-1.0" Glas Ich erwartete die folgende Ausgabe:
HERBIVORES CARNIVORES
Kann ich kenne den Grund, warum es die Klasse aus dem abhängigen Glas anstelle der angegebenen jar Laden?
Und gibt es eine Möglichkeit, die Enum-Klasse von Version 1.0 jar im Maven-Projekt zu laden?
den obigen Code verwenden ich die folgende Ausnahme bin immer. Exception in thread "main" java.lang.NoClassDefFoundError: java/lang/Object – user3351074
Verursacht durch: java.lang.ClassNotFoundException: java.lang.Object \t bei java.net.URLClassLoader.findClass (URLClassLoader.java:381) \t bei CustomURLClassLoader.loadClass (CustomURLClassLoader.java:22) \t bei java.lang.ClassLoader.loadClass (ClassLoader.Java: 357) – user3351074
Ich sehe diesen Fehler in meinem Code nicht. Ich habe mein Beispiel aktualisiert, um genau zu zeigen, was ich gerade mache. –