2014-07-25 10 views
8

Ich bin auf der Suche nach einer einfachen Erklärung der Beziehung zwischen java.library.path und dem Klassenpfad. Obwohl ich kaum ein Neuling bin, musste ich mich nie mit dem j.l.p. Aber wir haben Probleme mit einer WebSphere MQ-Anwendung, an der ich beteiligt bin, und wir möchten ihre Ablaufverfolgung aktivieren. Leider habe ich, nachdem ich IBM gesagt hatte, dass wir die MQ-Jars neu gepackt hätten, damit wir sie über Maven bereitstellen könnten, nicht einmal mit mir über das Problem gesprochen, wenn wir die WebSphere MQ-Jars nicht mit java.library.path geladen hätten.Was ist die Beziehung zwischen java.library.path und classpath

So großartig, lassen Sie uns unsere gesamte Bereitstellungsstrategie wiederholen. Ich bin okay mit dieser Kugel beißen, aber hier ist meine Frage:

Was ist die Beziehung zwischen java.library.path und dem Klassenpfad? Sind Klassen, die auf j.l.p gefunden wurden, für den Compiler sichtbar? Müssen Sie den j.l.p in der Befehlszeile des Compilers angeben? Können Sie diese Klassen sowohl im j.l.p als auch im Klassenpfad angeben? Welches hat Vorrang.

Und bitte bum-rap diese Frage für unzureichende Forschung. Ich habe natürlich "java.library.path" gegoogelt. Massen von Treffern natürlich. Ich habe versucht, eine erweiterte Google-Suche zu machen, die den Ausdruck auf die oracle.com-Seite beschränkt. Immer noch Millionen von Treffern. Ich habe versucht, beide Begriffe zu googeln. Holen Sie sich viele Neulinge Erklärungen von zweifelhafter Qualität. Ich habe versucht, die Java-Sprachspezifikation zu suchen. Keine Treffer

Ich möchte eine kurze und verbindliche Erklärung. Kann mich jemand auf einen hinweisen?

UPDATE - IBM besteht darauf, dass ihre MQ Trace-Einrichtung wird nicht funktionieren, wenn ich mit meiner Anwendung laden -Djava.library.path = {Pfad zu MQ Gläser} und sie werden nicht einmal unterstützen mich trotz einer mit Service-Vertrag, es sei denn, ich mache es so. Und natürlich habe ich Code, der auf diese Klassen verweist und kompilieren muss. Dies ist die Motivation hinter dieser Frage.

Antwort

10

Was ist die Beziehung zwischen java.library.path und dem Classpath?

Keine, das einzige, was sie gemeinsam haben, ist, dass sie beide Pfade sind.

Sind Klassen, die auf j.l.p gefunden werden, für den Compiler sichtbar?

Nr

tun, müssen Sie die j.l.p auf der Kommandozeile des Compilers angeben?

Niemals. Sie benötigen dies nur zur Laufzeit.

Können Sie diese Klassen sowohl im j.l.p als auch im Klassenpfad angeben?

Nur setzen Klassen im Klassenpfad.

Die j.l.p entspricht dem LD_LIBRARY_PATH und erzählt die OpenJDK/HotSpot JVM wo gemeinsamen nativen Bibliotheken wie .DLL oder .so nicht JARS zu finden, die keine Klassen.

http://examples.javacodegeeks.com/java-basics/java-library-path-what-is-it-and-how-to-use/

+0

Danke für den Link, Peter. Ich denke, die MQ-JARs, zumindest einige von ihnen, sind Native-Code (die MQ-Klassen für Java sind ein Wrapper um C), also könnte dies angebracht sein. Und doch führe ich sie seit Jahren ohne Probleme vom Klassenpfad aus, bis ich diese Trace-Einrichtung einschalten muss. –

+1

Sie können ein JAR nicht als native Bibliothek laden, das Betriebssystem wird das nicht unterstützen. Sie können eine native Bibliothek in ein JAR einfügen, aber die einzige Möglichkeit, sie zu laden, besteht darin, sie in das Dateisystem zu extrahieren und dann normalerweise explizit mit System.load() zu laden. Es ist möglich, dass die MQ-Bibliotheken den java.library.path in einer Weise verwenden, für die er nicht vorgesehen war. d. h. eine Bibliothek kann eine Eigenschaft analysieren und verwenden, was immer sie mag. –