2012-03-28 11 views
1

Ich verwende eine gemeinsam genutzte Bibliothek als eine Abhängigkeit zu meinem Java EE-Projekt. Die War-Datei wird auf Tomcat bereitgestellt.Abhängigkeit von Krieg sucht nach einer Datei im Klassenpfad

Die gemeinsam genutzte Bibliothek basiert auf einer Datei innerhalb des Klassenpfads. Gibt es eine Möglichkeit, sicherzustellen, dass die Datei innerhalb des Klassenpfads liegt? Ich kann den Pfad der Datei in der gemeinsam genutzten Bibliothek nicht fest codieren. Ich kann auch nicht vermeiden, die Klassen zu verwenden, die es erfordern.

Antwort

0

Alles in WEB-INF/Klassen in Ihrem Krieg befindet sich im 'Klassenpfad' (vorausgesetzt, es wird von einer Klasse verwendet, die mit dem URLClassLoader Ihrer Webanwendung geladen wurde).

Können Sie Ihre Datei während des Packens dorthin kopieren lassen?

1

Verpackung IST

Die einfachste Lösung ist es, alle abhängigen JAR-Dateien und Klassen in Ihrem ausfahrbaren IST-Datei zu verpacken, wenn Sie können. Dann haben Sie die Kontrolle darüber, wie sie von Ihrem angegebenen Klassenpfad geladen werden.

Wie BGR erwähnt alle kompilierten Java scource (* .class-Dateien) sollten in Ihrer WAR-Datei unter dem web-inf\classes Verzeichnis

Jede Unterstützung JAR-Dateien verfügbar sein sollten innerhalb Ihrer WAR-Datei unter dem web-inf\lib Verzeichnis sein.

Tomcat kennt diese Verzeichnisstrukturen, da es ein Industriestandardformat für WAR-Dateien ist.

Sie können natürlich von dieser Standardstruktur abweichen und JAR-Dateien von außerhalb Ihres WAR laden, aber dann müssen Sie mögliche Probleme beim Laden von Klassen verstehen. Was ich erwähnt habe, ist der einfachste Weg nach vorne.

Gibt es auf dem Klassenpfad eine Datei?

In Ihrer Anwendung können Sie etwas tun, um zu überprüfen, ob eine bestimmte Datei in Ihrem Klassenpfad vorhanden ist.

URL resource = this.getClass().getClassLoader().getResource(path);

Hier einige zusätzlichen Lese von Oracle über Location-Independent Access to Resources

1

Wenn gemeinsam genutzte Bibliothek (z lib1) Sie ist - dann können Sie benötigte Dateien packen hinein Glas ist. Stammordner des Jars ist der Stamm des Klassenpfads.

Wenn lib1 ein Drittanbieter ist, können Sie die Bibliothek lib1-res mit dieser Datei in jar erstellen. Und benutze diese Bibliotheken immer zusammen (make lib1-res abhängig von lib1, falls maven verwendet wird).

Verwandte Themen