Frage

Ich wechselte vor kurzem von .NET J2EE und bin verwirrt darüber, wo JAR-Dateien zu setzen. Ich weiß, dass die CLASSPATH, WEB-INF und Java-Web-Pfad Eclipse sind alle Orte, an denen JAR-Dateien gespeichert werden können, aber ich bin verwirrt darüber, welche Ordner zu verwenden, wann und warum.

Als erstes müssen wir die CLASSPATH. Ich habe dies in der Regel, indem sie in „Umgebungsvariablen“ nach innen gehen „My Computer“. Ich weiß, dass dies ist der Standard Ort, an dem die Java-Compiler für JAR-Dateien suchen. Wenn ich einen Ordner oder eine JAR meiner CLASSPATH Umgebungsvariable hinzufügen, warum wird es von Eclipse-ignoriert, den Java-Compiler und den Web-Server?

Auch ich weiß, dass WEB-INF \ LIB ein Ort ist, wo Sie die JAR-Dateien, die Ihr Web-App wird setzen können verwendet werden. Allerdings habe ich nur setzen JAR-Dateien in WEB-INF \ LIB ihnen ignoriert zu haben. In welchen Situationen sollte ich JAR-Dateien in WEB-INF \ LIB-Ordner? Wie kann ich Eclipse oder den Web-Server bekommen, um sie bemerken?

Bisher ist das einzige, was für mich funktioniert, ist tatsächlich die Java-Pfad für ein Eclipse-Projekt beim Aufbau zu ändern. Ich werde die JAR-Dateien auswählen ich brauche und drücken Sie „External JARs hinzufügen.“ Die meiste Zeit, wenn ich dies tun, wird von Eclipse meine JAR-Dateien erkennen und die Klassen darin lesen. Allerdings habe ich in einen Haufen von seltsamen zufälligen Fehler laufen, während dies zu tun (vor allem mit Abhängigkeiten zu tun haben, glaube ich). Aus irgendeinem Grund bekomme ich nur das Gefühl, dass dies nicht der richtige Weg ist, die Dinge zu tun, und dass ich fehle etwas wichtige Information. Wann soll ich External JARs in Eclipse manuell hinzugefügt werden, und wann soll ich die Dinge anders tun? Wie kommt Eclipse Java Build Path scheint nicht über die Ordner in meinem CLASSPATH-Umgebungsvariable wissen?

Wirklich, ich würde nur ein besseres Verständnis des CLASSPATH gewinnen möge, Eclipse Java Build Path und der WEB-INF / LIB-Ordner - der Zweck sie dienen, die Beziehungen zwischen ihnen, und wo soll ich meine sein Putten JAR-Dateien in verschiedenen Situationen. Ich würde einen Rat schätzen Sie mir geben könnten, oder bei einem Artikel, die Sie empfehlen können.

Danke.

War es hilfreich?

Lösung

Die CLASSPATH Sie in Ihrer Umgebung nur Standalone-Java-Anwendungen betrifft, das heißt, die Sie von einer Eingabeaufforderung oder ein Symbol. Wie Sie vielleicht bemerkt haben, ignoriert von Eclipse dies. Es setzt seine eigenen pro-Projekt CLASSPATHs auf.

javac und java, wenn von der Eingabeaufforderung genannt, soll / kann, diesen Weg ehren, aber es ist nicht mehr als große Praxis, dies zu tun. Es stellte sich heraus, dass jede App einen eigenen Satz von Sachen braucht, so ein globales CLASSPATH ist nicht wirklich einer von ihnen etwas Gutes zu tun. Moderne Praxis ist einfach, um den Classpath mit der -cp Option auf der Kommandozeile für javac oder java angeben.

Ein eigenständiger Web Application Server wird auch eine eigene Classpath einrichten. Von der Kommandozeile oder GUI wird WebAppServers in der Regel durch ein Skript (.BAT oder .sh) gestartet, die eine Classpath mit -cp einrichtet. Tomcat hat ein Verzeichnis namens common oder common/lib wo es Bibliotheken zu sehen erwartet, dass die unter ihm läuft der Server und alle Programme zur Verfügung stehen sollten. Aber Sie werden in der Regel nicht brauchen / wollen Chaos mit diesem, wie es Customaries ist für Anwendungen ihre eigene Bibliothek collectons in WEB-INF/lib zur Verfügung zu stellen.

So für einen Web-App, können Sie Ihre varous Gläser in das lib Verzeichnis setzen würden, unter WEB-INF, unter der Annahme, Eclipse-Pre-Builds, wie eine Verzeichnisstruktur für Sie.

Alle Libs Sie benötigen müssen auch Eclipse bekannt gemacht werden. Im Projekt-Explorer, wähle ich die ganze Reihe von ihnen auf einmal, mit der rechten Maustaste und wählen Build Path | add to build path. Das ist einfacher, als manuell mit Eclipse-Projekt Build-Pfad durcheinander.

Andere Tipps

Java hat eine lange Geschichte und die Erfahrung hat gezeigt, dass einige Ideen waren gut und einige waren schlecht.

Die Umgebungsvariable CLASSPATH war die erste Möglichkeit, der Java-Maschine zu sagen, wo Klassen aus Ihrem Programm zu suchen, und einigermaßen gut für die Kommandozeilen-Programme funktioniert. Es wurde schnell festgestellt, dass dies nicht eine globale Sache sein sollte (wie in Unordnung Dinge auf lange Sicht neigen), sondern eine pro-Programm Sache. Dies könnte durch die Schaffung eines Wrapper-Skript / BAT-Datei durchgeführt werden, die die Variable setzt und führt die Java-Maschine.

Alles war gut, dann werden die Menschen wollten Webserver Sachen in Java schreiben. Das Servlet-API erstellt wurde, wo eine Web-Anwendung ein Stand-alone-Gerät ist - dies ergab, dass der CLASSPATH für jeder Web-Anwendung ist die entpackten Dateien unter WEB-INF / classes plus die jar-Dateien unter WEB-INF / lib. Und nur das. Dies bedeutet, dass die globale Variable CLASSPATH ignoriert. Dies hat sich als sehr gute Sache sein, so das Konzept bereits an anderer Stelle gewandert.

Zum Beispiel eine „ausführbare jar“ (die Eclipse-rufe ein „runnable jar“), die mit „java -jar foobar.jar“ aufgerufen wird, enthält die komplette Classpath in dem Topf in einer speziellen Manifest-Datei. Java Web Start, das verwendet wird, um Java-Programme von einem Web-Server zu starten deutlich hingewiesen auf dem Server die volle Classpath in der Konfigurationsdatei aufgeführt werden.

Aber Sie, um loszulegen. Wenn Sie eine Java-Web-Anwendung schreiben:

  1. Holen Sie sich das Eclipse- Java EE Version.
  2. Erstellen Sie ein neues dynamisches Web-Projekt zum Beispiel foobar.
  3. Drag & Drop (oder Kopieren / Einfügen), um die JAR-Dateien benötigen Sie in foobar / webcontent / WEB-INF / lib
  4. Erstellen Sie eine neue Datei mit dem Namen foobar / webcontent / index.jsp. In der leeren Dateityp <h1>Hello World <%= new java.util.Date() %></h1>
  5. Direkt im Editor klicken für index.jsp, wählen Sie Start -> Ausführen auf Server, und wählen Sie das Basic -. Auf localhost Server> J2EE Vorschau und Fertig stellen

Ein Browser-Fenster wird geöffnet, entweder in einem Browser oder in Eclipse, die JSP-Seite übertragen wird. Sie können die JSP-Seite ändern, es mit Ctrl-S speichern und das Browserfenster laden, damit die Änderungen wirksam werden.

  

Auch ich weiß, dass WEB-INF \ LIB ein Ort ist, wo Sie die JAR-Dateien, die Ihr Web-App wird setzen können verwendet werden. Allerdings habe ich nur setzen JAR-Dateien in WEB-INF \ LIB ihnen ignoriert zu haben. In welchen Situationen sollte ich JAR-Dateien in WEB-INF \ LIB-Ordner? Wie kann ich Eclipse oder den Web-Server bekommen, um sie bemerken?

Das real Problem, das Sie hier haben, ist wahrscheinlich, dass Sie nicht bekommen haben < em> Eclipse Java EE Entwickler und / oder dass Sie gerade erstellt eine generische Java-Projekt anstelle eines Dynamic Web Projekt und die notwendige Ordnerstruktur selbst aufgebaut.

Wenn Sie erstellen Dynamisches Webprojekt in Eclipse Java EE Entwickler , dann wird von Eclipse hinzufügen automagically alle Bibliotheken in WEB-INF/lib zum Pfad bauen . Der Pfad bauen ist grob gesagt nur den Classpath, die sowohl compiletime und Laufzeit verwendet wird. Mit anderen Worten:. Fällt nur der 3rd-Party-JAR ist da drin, wirklich mehr braucht nichts getan werden

Beachten Sie, dass Java Fall empfindlich ist, so sollte es wirklich WEB-INF/lib genannt werden, nicht WEB-INF/LIB. Aber wie auch immer, wenn Sie erstellen Dynamisches Webprojekt , dann wird von Eclipse nur automatisch erzeugen, um die richtige Ordner / Dateistruktur für Sie.

Wie bereits von anderen gesagt, ignorieren Sie die %CLASSPATH% Umgebungsvariable. Es ist nur , die von javac.exe / java.exe und selbst dann nur , wenn Sie tun nicht geben Sie eine der -cp, -classpath oder - jar Argumente. In der realen Welt wird diese Umgebungsvariable selten verwendet wird, ist es nur einige Bequemlichkeit für den Anfang (und leider auch die meisten verwirrend ein, sie sollten nie erfunden haben).

Wenn Sie mit Web-Anwendungen zu tun hat, / WEB-INF / lib ist der tragbare Platz zu JAR-Dateien zu setzen. Dies ist, wo Web-Server Servlet-Container erwarten eine Anwendung JAR-Dateien zu finden.

Eklipse erfordert, dass Sie den Pfad zu Ihren Bibliotheken angeben, JAR-Dateien (auf Eigenschaften -> Java Build Path -> Registerkarte Bibliotheken). Dies kann auf der .classpath Projektdatei gefunden werden.

In der Regel haben Sie den JRE-Libs auf seinem Weg (die auch auf Ihrem Classpath wären), so das Hinzufügen der Libs zu dem Classpath und Aktualisieren von Eclipse Build-Pfad funktionieren würde.

Das WEB-INF-Verzeichnis sollte der Ort sein, die notwendigen Informationen für Ihre Web-Anwendung enthält.

Ich bin nicht ein Eclipse-Experte, aber ich denke, dass Ihr Problem wie folgt beantwortet werden kann:

1) CLASSPATH ist eine Umgebungsvariable, die in gelesen wird, wenn Sie Java-Programme zu starten und von Classloader verwendet wird, um herauszufinden, wo die Klassen platziert werden.

würde ich die CLASSPATH Variable ändert nur in dem Fall, wenn Sie ein Java-Programm aus einem Skript starten, da dies Sie bequem ermöglicht, um ein Programm zu starten und stellen Sie sicher, dass die Klassen zu finden sind. Dies wäre der Fall für Sie nicht, wie Sie die Web-Anwendung entwickeln.

2) WEB-INF / lib ist das Verzeichnis, unter dem der Web-Anwendung Containers Classloader (wie Tomcat oder Glassfish) sieht in, wenn Sie Ihre Web-Anwendung muss eine Klasse lösen. So setzen Sie dort die Klassen, die in Ihrer Web-Anwendung verwendet werden.

Einige IDE tun, um die Bibliotheken / .jar-Dateien enthalten, die Sie in einem Projekt verwenden automatisch in das Paket.

3) Eclipse-Bibliothek / Classpath während der Entwicklungszeit zu lösen. Ich würde davon ausgehen, aber Entschuldigungen für die Annahme, wie man wirklich soll dies nicht tun;), dass Sie eine Bibliothek definieren können (füge externe .jar-Dateien für Projekte) und die automatische Vervollständigung / all die anderen interessanten Features beginnen sollten mit dieser Arbeit, wie Sie machen im Grunde diese Klassen sichtbar für die IDE mit dieser Tätigkeit. Ich würde auch davon ausgehen, dass Sie dann diese Bibliotheken automatisch auf die Web-Projekte usw. hinzugefügt werden, markieren können, von der IDE.

In der Regel eine gute Lektüre darüber, wie Klassen während der Ausführung gefunden werden, ist

Insgesamt Kommentare half mir auch. Ich hatte alle jena .jars auf den Build-Pfad von Eclipse hinzugefügt, aber das war nicht ausreichend. Nach Vorschlag zu „WEB-INF / lib hinzufügen“ schien es intuitiv zu ziehen aus Bibliotheken Ordner auf WEB-INF (aus Eclipse), aber das hat nicht funktioniert. Auch nicht die .jars zu WEB-INF kopieren. Ich per Drag-and-falle schließlich aus dem Windows-Desktop auf die WEB-INF lib Ordner in Eclipse, und dass das Problem behoben. Es wäre schön, wenn alle .jars zu dem Build-Pfad automatisch hinzugefügt WEB-INF lib Eclipse kopiert wurden. Im Fall zählt es, dies war Eclipse IDE EE, Indigo Release, auf Windows 7.

scroll top