Tomcat CLASSPATH de l'est différente de celle de Java, et il ne comprend pas “.” Comment puis-je le changer?

J'ai passé des heures à essayer de comprendre pourquoi j'ai été faire les java.lang.NoClassDefFoundError, et j'ai trouvé la cause de Tomcat classpath.

J'ai utilisé le code ci-dessous pour voir ce que les variables de chemin d'accès tenir:

out.println("Classpath: '" + System.getProperty( "java.class.path" ) + "'" );
out.println("Ext dirs: '" + System.getProperty( "java.ext.dirs" ) + "'" );
out.println("Library path: '" + System.getProperty( "java.library.path" ) + "'" );
out.println("Path separator: '" + System.getProperty( "path.separator" ) + "'" );

Et la sortie est:

Classpath: ':/usr/local/tomcat/bin/bootstrap.jar' 
Ext dirs: '/usr/lib/jvm/java-6-sun-1.6.0.16/jre/lib/ext:/usr/java/packages/lib/ext' 
Chemin de la bibliothèque: '/usr/lib/jvm/java-6-sun-1.6.0.16/jre/lib/i386/server:/usr/lib/jvm/java-6-sun-1.6.0.16/jre/lib/i386:/usr/lib/jvm/java-6-sun-1.6.0.16/jre/../lib/i386:/usr/java/packages/lib/i386:/lib:/usr/lib' 
Séparateur de chemin: ':'

Comme vous pouvez le voir, le chemin de classe ne commence PAS par "." comme il est censé le faire, et je crois que c'est pourquoi mon programme ne peut pas trouver les classes que je l'importation de sous-répertoires dans ma webapp.

Pour voir où le classpath est réglé, je n'ai grep -R bootstrap.jar /usr/local/tomcat/, et trouvé ceci: CLASSPATH="$CLASSPATH":"$CATALINA_HOME"/bin/bootstrap.jar (dans le fichier /usr/local/tomcat/bin/catalina.sh)

Ce qui me fait croire que, pour certaines raisons, $classe est vide ici. Cependant, echo $CLASSPATH renvoie .:/usr/lib/jvm/java-6-sun/bin:/usr/local/tomcat/lib/servlet-api.jar

Quelqu'un peut-il aider à cerner le problème ici?


EDIT: Toutes mes servlet fichiers sont dans WEB-INF/classes/controllers/, et les bibliothèques, je suis en train de charger, sont des fichiers de classe dans les sous-répertoires.
Par exemple, si ClassName.class est dans le WEB-INF/classes/controllers/nom_du_paquet/répertoire, j'ai ajouter package packagename le début de ClassName.java, et je l'importer en utilisant import packagename.* dans someServlet.java.


EDIT2: j'ai résolu mon problème. Mon principal problème est que, comme écrit ci-dessous, en n'utilisant pas le bon paquet de noms. Aussi, j'ai essayé de compiler à partir de l'intérieur de la classes/controllers/ répertoire, au lieu de la compilation de classes/. Merci à vous tous pour votre aide!

OriginalL'auteur Murat Ayfer | 2009-10-23