Comment ajouter le POT de bibliothèques à la GUERRE de projet sans faire face à java.lang.ClassNotFoundException? Classpath vs Build Path vs /WEB-INF/lib
Comment dois-je ajouter JAR bibliothèques à une GUERRE de projet dans Eclipse sans faire face à java.lang.ClassNotFoundException
ou java.lang.NoClassDefFoundError
?
La CLASSPATH
variable d'environnement ne semble pas fonctionner. Dans certains cas, nous avons ajouter des fichiers JAR à la Build Path propriété du projet Eclipse pour rendre le code compilé. Nous avons parfois besoin de mettre les fichiers JAR à l'intérieur de /WEB-INF/lib
dossier de l'application web Java EE pour rendre le code à exécuter sur les classes à l'intérieur de ce POT.
Je n'ai pas de comprendre exactement pourquoi CLASSPATH
ne fonctionne pas et dans quels cas il convient d'ajouter les Pots de Build Path et quand exactement les Pots doivent être placés dans /WEB-INF/lib
.
OriginalL'auteur Kiran | 2011-07-22
Vous devez vous connecter pour publier un commentaire.
La
CLASSPATH
variable d'environnement n'est utilisé que par lesjava.exe
de commande et même alors, seulement lorsqu'il est utilisé sans aucune-cp
,-classpath
,-jar
arguments. Il est ignoré par les Ide comme Eclipse, Netbeans et à l'IDÉE. Voir aussi java.lang.ClassNotFoundException en dépit de l'aide de la variable d'environnement CLASSPATH.La Build Path est seulement pour les bibliothèques qui sont nécessaires pour obtenir le code du projet pour compiler. Manuellement en plaçant POT dans
/WEB-INF/lib
, ou de réglage de la Déploiement de l'Assemblée, ou de laisser un externe du système de construction comme Maven lieu le<dependency>
que le POT en/WEB-INF/lib
de produit de la GUERRE lors de la compilation, c'est seulement pour les bibliothèques qui sont nécessaires afin d'obtenir le code pour déployer et exécuter sur l'environnement cible trop. Notez que vous n'êtes pas censé créer des sous-dossiers dans/WEB-INF/lib
. Les Pots doivent être placés à la racine.Certaines bibliothèques sont déjà fournis par le serveur Java EE ou servletcontainer, comme JSP, Servlet, EL, etc. Si vous n'avez pas besoin de mettre des Pots de ces bibliothèques dans
/WEB-INF/lib
. En outre, il ne ferait que causer des classloading difficulté. Il suffit d' (indirectement) les spécifier dans Build Path seulement. Dans Eclipse, vous le faites normalement que par le réglage de la Ciblées Runtime en conséquence. Elle prendra automatiquement fin dans Build Path. Voir aussi Comment puis-je importer les javax.servlet API dans mon projet Eclipse?D'autres bibliothèques, généralement 3e partie, comme Apache Commons, les pilotes JDBC et les bibliothèques standard n'est pas fournie par la cible servletcontainer (par exemple Tomcat ne prend pas en charge JSF, CDI, JPA, EJB, etc sorti de la boîte), le besoin de le retrouver dans
/WEB-INF/lib
. Vous n'avez pas nécessairement besoin de le spécifier dans Build Path. Peut-être seulement quand vous l'avez déjà comme Utilisateur de la Bibliothèque, mais vous devez alors utiliser Déploiement de l'assemblée réglages. Voir aussi ClassNotFoundException lors de l'utilisation de Bibliothèques dans Eclipse build path.Dans le cas où vous utilisez Maven, alors vous devez assurez-vous que vous marquez les bibliothèques
<scope>provided</scope>
si ceux-ci sont déjà fournis par la cible de l'exécution, tels que Java EE, Servlet, EL, etc dans le cas où vous déployez pour WildFly, TomEE, etc. De cette façon, ils ne se retrouvent pas dans les/WEB-INF/lib
de produit de la GUERRE (et potentiellement provoquer des conflits avec le serveur-bibliothèques intégrées), mais ils vont finir dans l'Éclipse du Build Path (et obtenir le code du projet pour compiler).OriginalL'auteur BalusC
Ces Pots dans le build path sont référencés pour la compilation (compile) processus. Si vous exportez votre Application Web, ils ne sont pas inclus dans la dernière GUERRE (faire un essai).
Si vous avez besoin de les Pots au moment de l'exécution, vous devez les placer dans WEB-INF/lib ou le serveur classpath. Placer vos Pots dans le serveur classpath ne n'a de sens que si plusieurs Guerres de partager une base de code commune et ont besoin d'accéder à des objets partagés (par exemple, un Singleton).
OriginalL'auteur home
Si vous utilisez Maven:
Ouvrez les propriétés du projet, et en vertu de Déploiement de l'Assemblée cliquez sur Ajouter...
Puis sélectionnez Java Build Path Entrées et sélectionnez les Dépendances Maven
OriginalL'auteur Tal Haham
Je veux donner la réponse pour le suivant lien question ClassNotFoundException oracle.jdbc.le pilote.OracleDriver seulement dans le servlet, à l'aide d'Eclipse
Réponse: En Myeclipse aller à Serveur-->cliquez à gauche sur Myeclipse Tomcat7-->Configurer le Connecteur de Serveur-->(Développez)Myeclipse Tomcat7--> Chemins-->Ajouter au classpath-->Add jar (ajouter oracle14 jar)-->ok
OriginalL'auteur anikesh sharma