Classloader Problem

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hallo zusammen

Ich versuch mal mein Problem zu beschreiben:

Gegeben ist ein jar-file, welches ich in mein Projekt eingebunden habe. In meinem Projekt habe ich nun eine Klasse erstellt wie sie bereits im jar enthalten ist (package Name und Klassenname sind identisch).

Nun ist nötig variabel eine der gewünschten Klassen zu laden.
Also entweder die abc.xyz.MyClass aus dem JAR oder direkt aus dem Projekt

Im Moment wird immer die Klasse aus dem aktuellen Projekt genommen.

Hier mein Versuch die aus der Jar zu nutzen:

Code:
     File file = new File("./lib/myPackage.jar");
     url = file.toURI().toURL();
     URL[] urls = new URL[]{url};
     Class cls = new URLClassLoader(urls).loadClass( "abc.xyz.MyClass" );

Bin über jeder Hilfe sehr dankbar
 
G

Gast

Gast
Erstmal danke für den Link, aber leider nicht ganz daß was ich suche.

Vielleicht nochmal ein bissl anders erklärt: :)

Ich hab ein JAR, welches ich eingebunden habe.
Nun bräuchte ich für manche Sachen einen einfachen Dummy für ein im JAR befindliche Klasse.
Ich hab somit eine Klasse mit selben Namen mit gleicher Package-Struktur erstellt.

Problem ist halt, daß Java nun immer die Dummy-Klasse nimmt.
Was aber nicht immer gewollt wird.

Ich bräuchte also eine Möglichkeit um anzugeben, welche der beiden Klassen er nehmen soll.
Entweder aus JAR oder aus Projekt. Beide haben die Strucktur: abc.xyz.MyClass.
 

Wildcard

Top Contributor
Um eine Klasse mit einem eigenen ClassLoader laden zu können, darf die entsprechende Klasse nicht durch den SystemClassLoader gefunden werden, also nicht im Classpath liegen.
Für was braucht man eigentlich ein solches Konstrukt?
 
G

Gast

Gast
Brauch das um EinzelKomponenten zu testen.

Ich muss halt Komponenten durch MOCKs ersetzen um diese dann auszuwerten.
Aber für den Testen muß/darf ich nur vordefinierte Klassen durch MOCKs ersetzen.
 
I

ich wieder

Gast
Hab mal noch ein bissl gelesen, wie es gehen könnte.

Die Theorie denk ich ein bissl verstanden zu haben, aber an der Umsetzung scheiterts im Moment.

Hiermal noch ein Link: Java Insel


Das müsste (denk ich) gemacht werden:
- Eigenen Classloader schreiben, der die Klasse aus dem JAR läd und das "Linking" macht
- Es muß vermieden werden, daß Bootstrap-, Erweiterungs- und System-Klassenlader ausgeführt/verwendet werden,
da die wieder die Klasse vom Projekt (Dummy) verwenden würden.

Jeder Klassenlader L hat dazu einen Vater-Klassenlader V. Erst darf der Vater versuchen, die Klassen zu laden. Kann er es nicht, gibt er die Arbeit an L ab.


Ist das soweit theoretisch richtig?

und...
1) wie ermöglicht man das Linking in einem Classloader (werd aus denen im JDK nicht schlau)?
2) welche Methoden muß ich vom Classloader überschreiben?
3) wie verbiete ich daß durchsuchen durch die anderen "drüberliegenden" Classloader?
 

Wildcard

Top Contributor
Du kannst ganz einfach den URLClassloader verwenden, musst wie gesagt aber dafür sorgen das die zu ladende Klasse nicht im Classpath liegt.
 
G

Gast

Gast
Wildcard hat gesagt.:
... dafür sorgen das die zu ladende Klasse nicht im Classpath liegt.

Genau da liegt das Problem, denn sowohl das JAR sowie die Dummys sind im Projekt sichtbar. :bahnhof:
 

Murray

Top Contributor
Evtl. kann man so ein Problem besser per Instrumentation lösen; dabei kann man dafür sorgen, dass Klassen beim Laden, also zur Laufzeit, nachträglich verändert werden. Das ist aber ein ziemlich komplexes Thema.
 

mfernau

Bekanntes Mitglied
Man kann eine Klasse doch auch über einen ClassLoader direkt ansprechen? Ohne das ich das jetzt hier alles gelesen und verstanden habe, aber man kann eine klasse doch auch über den ClassLaoder selbst laden. Da ist es dann egal, ob die Klassen im Bootstrap liegen oder nicht. Wenn Du einen CL für deine JAR-Dateien hast, dann benutze diesen um eine Klasse zu lasen und Du hast ganz sicher diese. Dann kann man allerdings auch keine Schnittstellen oder sowas aus dem System-CL benutzen um diese dann anzusprechen. Das wird nie gehen..
 

Wildcard

Top Contributor
Nein, ein Classloader leitet immer zuerst an den Parent weiter (aus Sicherheitsgründen).
Wenn der Parent die Klasse findet kommt der Child-Classloader nicht zum Zug.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
schlingel Webstart/Applet Problem - Classloader-Bug Allgemeine Java-Themen 7
S Problem mit ClassLoader.getSystemResource !! Allgemeine Java-Themen 3
G Problem mit URL classloader Allgemeine Java-Themen 10
R Problem mit Classloader Allgemeine Java-Themen 2
K Problem mit ClassLoader - Laden von Resourcen aus Jar's Allgemeine Java-Themen 14
C Problem mit ClassLoader Allgemeine Java-Themen 2
L Classpath Zur Laufzeit bestimmte Klassen in Classloader hinzufügen? Allgemeine Java-Themen 4
L Eigenener ClassLoader wirft java.lang.NoClassDefFoundError Allgemeine Java-Themen 0
D Classloader ohne Package Allgemeine Java-Themen 10
N Klasse via ClassLoader laden Allgemeine Java-Themen 2
D ClassLoader für Variablen einer Klasse setzen Allgemeine Java-Themen 24
K [Refactoring] ClassLoader Verzeichnis durchsuchen lassen Allgemeine Java-Themen 7
M Security Manager für bestimmte Klassen/Classloader? Allgemeine Java-Themen 3
hdi ClassLoader / Constructor Call intern Allgemeine Java-Themen 11
C inteface not visible from classloader Allgemeine Java-Themen 2
M jdbc treiber (h2) mit eigenem ClassLoader laden Allgemeine Java-Themen 4
B Eigener ClassLoader Allgemeine Java-Themen 9
MQue ClassLoader Pfad ausgeben Allgemeine Java-Themen 6
V Image laden - URL über ClassLoader ermitteln Allgemeine Java-Themen 2
J Eigener ClassLoader wird nicht immer verwendet Allgemeine Java-Themen 3
E Wieder mal der Classloader Allgemeine Java-Themen 6
F ClassLoader und "Cache" Allgemeine Java-Themen 2
MQue ClassLoader Allgemeine Java-Themen 5
N ClassLoader - Laden von Bytecode aus einer Datenbank Allgemeine Java-Themen 6
P Klasse über eigenen Classloader laden: SecurityException Allgemeine Java-Themen 11
N Classpath mit ClassLoader künstlich erweitern Allgemeine Java-Themen 2
P System.getProperty zu Classloader Allgemeine Java-Themen 21
M Bibliotheksname zur Laufzeit ermitteln (Classloader) Allgemeine Java-Themen 7
MQue ClassLoader Allgemeine Java-Themen 18
S classloader + jar + resourcen in dem jar Allgemeine Java-Themen 4
F mit classloader klassen ausserhalb *.jar einlesen Allgemeine Java-Themen 4
G Font mittels ClassLoader in .jar wirft NotFoundException Allgemeine Java-Themen 10
P Kompilerfehler: at java.lang.ClassLoader.loadClassInternal(U Allgemeine Java-Themen 16
T ClassLoader und Zugriff auf unbekannte Klassen Allgemeine Java-Themen 5
C ClassLoader - dymisches Laden von JDBC Drivers Allgemeine Java-Themen 3
D Programm mit eigenem ClassLoader funktioniert nicht Allgemeine Java-Themen 12
T Brauche Hilfe bei ClassLoader Allgemeine Java-Themen 2
G cachender ClassLoader u.v.m. Allgemeine Java-Themen 5
G ClassLoader Allgemeine Java-Themen 3
R ClassLoader funktioniert in Verbindung mit JAR-Datei nicht Allgemeine Java-Themen 8
krgewb Problem mit Umlauten und Eszett bei InputStream Allgemeine Java-Themen 3
Max246Sch Backtracking Problem Box Filler Allgemeine Java-Themen 6
NightVision402 VisualVM Startskript Problem Allgemeine Java-Themen 3
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
F Problem mit PDFBOX Library Allgemeine Java-Themen 1
A Java modul Problem Allgemeine Java-Themen 4
D Read JSON File Problem Allgemeine Java-Themen 9
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
J Problem mit JasperReports Allgemeine Java-Themen 8
M log4j Problem mit jlink Allgemeine Java-Themen 19
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
P Selenium . getText Problem Allgemeine Java-Themen 9
A Jar zu Exe Problem Allgemeine Java-Themen 13
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
A Thread.sleep Problem Allgemeine Java-Themen 2
A Problem bei der Nachbarschafttest Allgemeine Java-Themen 11
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
G javamail Problem beim Empfangen von Nachrichten Allgemeine Java-Themen 3
Splayfer JDA Problem mit MessageCounter Allgemeine Java-Themen 0
Splayfer Problem mit BufferedWriter Allgemeine Java-Themen 3
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
N Maven Problem mit Datenbanktreiber (H2 Embedded) Allgemeine Java-Themen 12
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
C ArrayList Problem Allgemeine Java-Themen 3
kev34 nim-Spiel problem Allgemeine Java-Themen 1
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
G Welches Problem besteht bei den Typparametern? Allgemeine Java-Themen 5
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6
T PIM basierend auf netbeans via AnyDesk Problem Allgemeine Java-Themen 3
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
Kirby.exe Verständnis Problem bei Rucksack Problem Allgemeine Java-Themen 6
B Eclipse-Lombok-Problem Allgemeine Java-Themen 19
I Input/Output ObjectOutputStream - Problem Allgemeine Java-Themen 7
1 Multiple Choice Knapsack- Problem Allgemeine Java-Themen 2
kodela Problem mit strukturiertem Array Allgemeine Java-Themen 18
E Problem mit Gridlayout und Button Allgemeine Java-Themen 2
A Array Problem Allgemeine Java-Themen 8
bueseb84 Problem Allgemeine Java-Themen 0
S Problem mit Arrays Allgemeine Java-Themen 1
D Nullpointer Exception Problem Allgemeine Java-Themen 5
B Problem mit meinen Klassen Allgemeine Java-Themen 6
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
J Problem beim Umstellen auf Java jdk 13 Allgemeine Java-Themen 3
J Problem bei Install java 13 Allgemeine Java-Themen 3
X Profitable Reise Problem Allgemeine Java-Themen 32
A Problem beim öffnen von Java-Installern Allgemeine Java-Themen 1
Dann07 Problem mit JavaMail API Allgemeine Java-Themen 26
J Problem beim Generischen Klassen und Interfaces Allgemeine Java-Themen 2
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
J Clear-Problem Allgemeine Java-Themen 10
B Problem zu einem Java Projekt Allgemeine Java-Themen 6
S JFileChooser Problem Allgemeine Java-Themen 4
M Traveling Salesman - MST Heuristik Problem Allgemeine Java-Themen 4
J Traveling Salesman Problem Allgemeine Java-Themen 14
E Java Editor Problem mit 2er Exceptions Allgemeine Java-Themen 12

Ähnliche Java Themen


Oben