JAR Library

hasso

Mitglied
Hallo,

ich habe ein Programm geschrieben und daraus eine JAR-Datei erzeugt. Diese JAR-Datei habe ich jetzt in ein anderes Java-Programm eingebunden und kann auch problemlos auf die Funktionen zugreifen.
Probleme entstehen wenn ich auf Funktionen in der JAR zugreife die wiederrum selbst auf ein eingebundes JAR zugreifen.

Okay klingt unverständlich, probiere es nochmal anders:

Ich hab ein Programm geschrieben welches 3 JARs einbindet und aus diesem Programm wieder ein JAR exportiert. Wenn ich dieses jetzt irgendwo einbinde und auf eine Funktion zugreife die auf Funktionen einer der 3 JARs zugreift stürzt mir das Programm ab und er sagt er kann die JAR nicht finden.

Werden die gar nicht mit eingebunden ? Oder kann ich das irgendwo einstellen ?

Grüße
 
S

Spacerat

Gast
Das klingt mir sehr nach Jar-in-Jar-Export. Die inneren Jars müssen natürlich vor ihrer Verwendung in den Classpath extrahiert werden, sonst wird das nichts.
 

hasso

Mitglied
Hallo,

okay so ganz hab ichs doch nicht verstanden, wobei ich schwören könnte gestern hats funktioniert und heute jetzt nicht mehr.

Ich habe ein:

Programm A <---- Jar B <---- Jar C

welches ein Jar B hinzugefügt bekommt. Jar B wiederrum benutzt Jar C.
C ist hierbei eine externe Jar auf die ich keinen Zugriff habe.

Im Programm B hab ich diese Jar C hinzugefügt und kann sie dort normal benutzen. In den Project Properties hab ich im "Java Build Path" ein Häckchen bei Order und Export (Build Class Path) gesetzt für Jar C . Was für mich soviel bedeutet dass das Jar C in den Classpath übernommen wird.

Wenn ich die nun erzeugte Jar B in Programm A einbinde kann ich zwar alle Funktionen aus B problemlos benutzen aber wehe B greift auf eine Klasse aus C zu, dann fliegt er mir um die Ohren mit einer ClassDefNotFound runtime exception.

Wie kann ich denn jetzt rauskriegen WO er sucht und WO er diese Jar erwartet ? Ich hab keine Idee mehr was ich noch anders machen sollte. Kann ich irgendwie überprüfen ob die Jar C in den ClassPath übernommen wurde ?

Grüße
 

hasso

Mitglied
Okay,

wenn ich die Jar C auch noch in Programm A einbinden funktioniert es.

Aber das kann ja nicht die Lösung sein, Jar C ist ja jetzt doppelt eingebunden, einmal in Jar B (wo seine Funktionen genutzt werden) und einmal in Programm A.
 
T

trääät

Gast
hatte mal ein ähnlich witziges problem bei nem plugin-system ...

das plugin-system selbst war als lib ausgelagert und nur über einen URLClassLoader geladen ... also nicht direkt im classpath gewesen ...
folglich konnte das programm selbst natürlich nur mit der über den URLClassLoader zur verfügung gestellten schnittstelle arbeiten ...

so bald nun über die schnittstelle das system zum laden von plugins aufgefordert wurde flogen mir auch einige exceptions um die ohren das klassen aus dem über den URLClassLoader geladenen plugin-system-jar angeblich nicht gefunden werden konnten ... von den plugins selbst mal abgesehen ...

das problem liegt vermutlich in irgendeiner art und weise im class-loader system von java und darin das der classloader es nicht packt das wenn B.jar in A.jar im manifest steht und C.jar im manifest von B.jar das manifest von B.jar so zu verarbeiten das automatisch daduch rekursiv C.jar mit eingebunden wird was zu fehlern führt ...

lösung : B.jar muss so gebaut sein das es selbst URLClassLoader nutzt und C.jar unabhängig laden kann ... oder C.jar muss im manifest von A.jar liegen ...
 
S

Spacerat

Gast
Also in Eclipse und auch zur Laufzeit müssen die Jars mit den Klassen auf welche die Libs zugreifen natürlich erreichbar sein.
Wenn ein Jar in einem anderen steckt und andere auch damit arbeiten wollen (bzw. sollen), muss das innere Jar in den Classpath extrahiert werden.
In einem PI-System kann man das noch ein wenig anders gestalten und zwar so, dass einer Anwendung nur die Klasse des PI-Loaders und die Strukturen des verwendeten Plugins bekannt sind. Der PI-Loader wäre dann für das Laden der PI-Klassen verantwortlich und das kann er von sonst wo (also von Pfaden die nur der PI-Loader kennt) per URL-Classloader machen. In diesem Fall sollte es der Anwendung egal sein, woher die Klassendefinition des PIs kommt, hauptsache der Loader kann Instanzen davon bereitstellen. Das PI-Loader-Archiv kann dazu natürlich die PI-Archive beinhalten, extrahieren muss er sie (zumindest die von der Anwendung geforderten) vor der Verwendung trotzdem.
 
T

trääät

Gast
dieses beispiel stammt nur aus einer sehr frühen version eines sehr alten systems mit dem ich begonnen habe modular zu entwickeln ...
mitlerweile bin weiter und habe dieses problem gelöst ... und zwar sowohl wenn das lib-jar im classpath der anwendung liegt als auch wenn es nur über einen URLClassLoader geladen wird ...
jedoch scheint das problem von to daran zu liegen wie die verwendete lib des moduls zu verwenden ist ... vermutlich ist dies inkompatibel zu dem von to verwendeten system ...
genaueres könnte man nur anhand von code-ausschnitten sagen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B VISA.jar in Projekt einbinden (Library) Java Basics - Anfänger-Themen 5
M Moorhuhn Pixel-Aimbot mit Robot Library Java Basics - Anfänger-Themen 12
I SCSS to CSS library Java Basics - Anfänger-Themen 1
sserio Date Library Frage Java Basics - Anfänger-Themen 9
D Welche GUI Library für eine Client Server Chat App Java Basics - Anfänger-Themen 14
S Maven und externe Library Java Basics - Anfänger-Themen 2
D GPIO Nutzung mit Pi4J Library auf Raspberry funktioniert nicht Java Basics - Anfänger-Themen 3
A Java command line binding (library)? Java Basics - Anfänger-Themen 5
S Library fuer Graphen Java Basics - Anfänger-Themen 3
O Framework/Library Java Basics - Anfänger-Themen 5
I Erste Schritte Native code library failed to load beim Ausführen eines Beispiels Java Basics - Anfänger-Themen 5
E Was ist die JRE System Library? Java Basics - Anfänger-Themen 3
G Klassenreferenz an Library übergeben Java Basics - Anfänger-Themen 1
S Wie entwickelt man eine Library die auf dem JRE und Android laeuft..? Java Basics - Anfänger-Themen 0
M Access restriction Problem, obwohl library eingebunden ist Java Basics - Anfänger-Themen 0
E Externe Library .zip Datei importieren Java Basics - Anfänger-Themen 3
U Dokumentation einer Library hinzufügen Java Basics - Anfänger-Themen 3
U Externe Library im non runnable jar File im eclipse Java Basics - Anfänger-Themen 1
D Java Eclipse hat scheinbar keine library Java Basics - Anfänger-Themen 2
S log4j in externer Library Java Basics - Anfänger-Themen 4
J HILFE Benutzen einer Klasse aus JRE System Library Java Basics - Anfänger-Themen 4
J Aus "import" die genutzte Library erfahren Java Basics - Anfänger-Themen 4
Kenan89 Wo sind die Java Standard Library Source Codes zu finden? Java Basics - Anfänger-Themen 5
Joew0815 Classpath Eclipse - Library hinzufügen (NativeBass) Java Basics - Anfänger-Themen 23
B ICO Library über Eclipse einbinden Java Basics - Anfänger-Themen 2
B Dokumentation in der jre-Library finden Java Basics - Anfänger-Themen 9
I Java library betriebssystemabhängig Java Basics - Anfänger-Themen 4
Mikescher Classpath Library wird nicht geladen - nur im exportierten Zustand Java Basics - Anfänger-Themen 4
S Library importieren in Eclipse Java Basics - Anfänger-Themen 9
L Library nötig, obwohl nicht in Java-Code verwendet Java Basics - Anfänger-Themen 4
D Java dll's und java.library.path Java Basics - Anfänger-Themen 2
V libssrckdtree-j Generic k-d tree Java library - weiss nicht wo des hin soll Java Basics - Anfänger-Themen 2
F Library mit JAR exportieren Java Basics - Anfänger-Themen 2
G vdheide library: List<File> to MP3File[] Java Basics - Anfänger-Themen 4
D .jar file in library hinzufügen Java Basics - Anfänger-Themen 2
V Link Error java.library.path Java Basics - Anfänger-Themen 4
G Objekt mit Library löschen Java Basics - Anfänger-Themen 6
H -Djava.library.path liefert in der Konsole "ClassNotFou Java Basics - Anfänger-Themen 4
D Probleme mit java.library.path unter linux Java Basics - Anfänger-Themen 4
E Setzen des java.library.path Java Basics - Anfänger-Themen 7
N *.jar erstellen & library importieren? Java Basics - Anfänger-Themen 5
A externe Library wird nicht gefunden Java Basics - Anfänger-Themen 4
M "shared library *.so" unter Win32 als Dll nutzen? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben