29 votes

CLASSPATH, Java Buld Path (éclipse) et WEB-INF-LIB : que utiliser, quand et pourquoi ?

J'ai récemment opté pour l'J2EE de .NET, et je suis confus sur où mettre les fichiers JAR. Je sais que le chemin de la classe, WEB-INF, et Eclipse Java sur le Chemin Web sont tous les lieux où les Bocaux peuvent être conservés, mais je suis confus au sujet de laquelle le dossier de l'utiliser, quand et pourquoi.

Tout d'abord, nous avons le CLASSPATH. J'ai l'habitude de régler en allant dans "Variables d'Environnement" à l'intérieur "de Mon Ordinateur." Je sais que c'est l'endroit par défaut où le compilateur Java regarde les fichiers JAR. Quand j'ai ajouter un dossier ou un POT à ma variable d'environnement CLASSPATH, pourquoi est-il ignoré par Eclipse, le compilateur Java et le serveur web?

Aussi, je sais que WEB-INF\LIB est un endroit où vous pouvez mettre les fichiers JAR que votre application web va utiliser. Cependant, j'ai mis en Pots dans WEB-INF\LIB pour les avoir seulement être ignoré. Dans quelles situations doit-je mettre les Pots dans WEB-INF\LIB dossier? Comment puis-je obtenir de l'Éclipse ou le serveur web pour les remarquer?

Jusqu'à présent, la seule chose qui fonctionne pour moi est de changer le Java Build Path pour un projet Eclipse. Je vais sélectionner les Pots j'ai besoin et cliquez sur "Add External JARs." La plupart du temps quand je fais cela, Eclipse va reconnaître mes Pots et de lire les classes y sont. Cependant, j'ai couru dans un tas de bizarre erreurs aléatoires tout en faisant cela (surtout d'avoir à faire avec des dépendances, je pense). Pour une raison quelconque, j'ai juste le sentiment que ce n'est pas la bonne façon de faire les choses, et que je suis absent quelque pièce essentielle de l'information. Quand dois-je Ajouter manuellement Externe des Pots à l'intérieur de l'Éclipse, et quand je dois faire les choses différemment? Comment se fait-Eclipse Java Build Path ne semble pas savoir sur les dossiers dans ma variable d'environnement CLASSPATH?

Vraiment, je voudrais juste mieux comprendre le chemin de la classe, Eclipse Java Build Path, et la WEB-INF/LIB du dossier -- les buts qu'ils servent, les relations entre eux, et où je dois mettre mes Pots dans diverses situations. Je vous serais reconnaissant de tout conseil que vous pourriez me donner, ou des articles que vous pourriez recommander.

Je vous remercie.

23voto

Carl Smotricz Points 36400

L' CLASSPATH vous définissez dans votre environnement affecte uniquement autonome des applications Java, c'est à dire ceux que vous exécutez à partir d'une invite de commande ou une icône. Comme vous l'avez remarqué, Eclipse ignore cela. Il met en place son propre par projet " les chemins de classe.

javac et java, si elle est appelée à partir de l'invite de commande, doit-on/peut honorer cette voie, mais elle n'est plus considérée comme une grande pratique de le faire. Il est avéré que chaque application a besoin de son propre ensemble de trucs, donc un chemin de classe global n'est pas vraiment en train de faire tout de leur bien. La pratique moderne est tout simplement de spécifier le chemin de la classe avec l' -cp option sur la ligne de commande pour javac ou java.

Autonome serveur d'Applications Web sera également mis en place son propre chemin de classe. À partir de la ligne de commande ou l'interface utilisateur, WebAppServers sont généralement commencé par un script (.BAT ou .sh) qui définit un chemin de classe à l'aide de -cp. Tomcat a un répertoire appelé common ou common/lib où il s'attend à voir les bibliothèques qui devrait être disponible le le serveur et tous les programmes fonctionnant sous elle. Mais vous aurez généralement pas besoin/envie de jouer avec cela, comme il est coutumiers pour les applications de fournir leur propre bibliothèque collectons en WEB-INF/lib.

Donc, pour une application Web, vous auriez mis votre varous bocaux dans l' lib répertoire, en vertu de l' WEB-INF, en supposant que Eclipse pré-construit une telle structure de répertoire pour vous.

Toutes les libs vous avez besoin doivent également être portées à la connaissance de l'Éclipse. Dans l'Explorateur de Projet, je sélectionne l'ensemble de la flopée d'entre eux à la fois, cliquez-droit et sélectionnez Build Path | add to build path. C'est plus facile que de jouer avec de l'Éclipse du projet de construction de chemin d'accès manuellement.

9voto

Java a une longue histoire et l'expérience a montré que certaines idées étaient bonnes et certains étaient mauvais.

La variable d'environnement CLASSPATH a été la première façon de faire la Java machine où trouver les classes à partir de votre programme, et qui fonctionne plutôt bien pour les programmes en ligne de commande. Il a été rapidement constaté que cela ne devrait pas être un global chose (comme qui ont tendance à gâcher les choses dans le long terme), mais par le programme de chose. Cela pourrait être fait par la création d'un script de lancement/BAT-fichier qui définit la variable et exécute la Java machine.

Tout allait bien, et puis on voulait écrire serveur web de trucs en Java. La Servlet API a été créé dans le cas où une application web est une unité autonome - ce qui a entraîné que le CLASSPATH pour chaque application web est les fichiers décompressés sous WEB-INF/classes, plus le pot-fichiers sous WEB-INF/lib. Et uniquement cela. Cela signifie que le chemin de classe global variable est ignorée. Cela a été trouvé pour être une TRÈS bonne chose, de sorte que le concept a migré ailleurs.

Par exemple, un "exécutable jar" (qui Éclipse appelle une "runnable jar") qui est invoquée avec "java-jar foobar.jar" contient l'ensemble des classpath à l'INTÉRIEUR du Bocal dans un fichier manifeste. Java Web Start qui est utilisée pour démarrer des programmes java à partir d'un serveur web explicily listes de l'intégrale de chemin de classe dans le fichier de configuration sur le serveur.

Mais, pour obtenir vous avez commencé. Si vous voulez écrire une application web Java:

  1. Obtenez de l'Eclipse Java EE version.
  2. Créer un nouveau Projet Web Dynamique par exemple nommé foobar.
  3. Le glisser-déposer (ou de le copier/coller) le fichier jar que vous avez besoin dans foobar/WebContent/WEB-INF/lib
  4. Créez un nouveau fichier nommé foobar/WebContent/index.jsp. Dans le vide type de fichier <h1>Hello World <%= new java.util.Date() %></h1>
  5. Faites un clic droit dans l'éditeur pour l'indice.jsp, cliquez sur Exécuter -> Exécuter sur le Serveur, et de choisir la Base -> J2EE aperçu au serveur localhost, et la Finition.

Une fenêtre de navigateur s'ouvre, soit dans un navigateur ou à l'intérieur de l'Eclipse qui sera le rendu de votre JSP-page. Vous pouvez modifier la JSP-page, l'enregistrer avec les touches Ctrl-S et de recharger la fenêtre du navigateur pour voir les changements.

4voto

BalusC Points 498232

Aussi, je sais que WEB-INF\LIB est un endroit où vous pouvez mettre les fichiers JAR que votre application web va utiliser. Cependant, j'ai mis en Pots dans WEB-INF\LIB pour les avoir seulement être ignoré. Dans quelles situations doit-je mettre les Pots dans WEB-INF\LIB dossier? Comment puis-je obtenir de l'Éclipse ou le serveur web pour les remarquer?

Le réel problème que vous avez ici est probable que vous n'avez pas obtenu Eclipse for Java EE developers et/ou que vous venez de créer un générique de Projet Java au lieu d'un Projet Web Dynamique et de constituer le dossier nécessaire à la structure vous-même.

Si vous créez un Projet Web Dynamique dans Eclipse pour les développeurs Java EE, puis Eclipse va automatiquement ajouter les bibliothèques en WEB-INF/lib pour le build path. Le chemin de génération est à peu près dit à peu le chemin de la classe qui est utilisée dans les deux compile-time et de l'exécution. Avec d'autres mots: il suffit de déposer la 3ème partie JAR est, vraiment, rien de plus doit être fait.

Notez que Java est sensible à la casse, donc il doit être vraiment qualifié WEB-INF/lib, pas WEB-INF/LIB. Mais de toute façon, si vous créez un Projet Web Dynamique, puis l'Éclipse sera juste automatiquement générer la bonne structure de dossier/fichier pour vous.

Comme dit par d'autres, ignorer l' %CLASSPATH% variable d'environnement. Il est uniquement utilisé par javac.exe/java.exe et même alors, seulement quand vous n'avez pas à spécifier l'une de l' -cp, -classpath ou -jar arguments. Dans le monde réel de cette variable d'environnement est rarement utilisé, c'est juste une commodité pour les débutants (et malheureusement aussi la plus confuse, elles ne devraient jamais être inventé).

2voto

Powerlord Points 43989

Si vous avez affaire à des applications web, /WEB-INF/lib est l'endroit portable pour mettre JARs. C'est là que <s>les serveurs Web</s> servlet conteneurs s'attendent à trouver des fichiers pot d'une application.

2voto

Diego Dias Points 6879

Eclipse vous oblige à spécifier le chemin vers vos bibliothèques, fichiers pot (sur les propriétés - Java Build Path - ' Bibliothèques onglet). Ceci peut être trouvé sur le fichier de projet .classpath.

Habituellement, vous avez les libs JRE sur son chemin (qui serait sur votre chemin de classe trop), afin d'ajouter les libs à la classe path et la mise à jour éclipse construire chemin fonctionnerait.

Le répertoire WEB-INF doit être l'endroit qui contient les informations nécessaires pour votre application web.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X