2010-10-07 4 views
2

Essayez d'apporter de légères modifications au moteur Velocity d'Apache.Eclipse et comment il gère JARS - Odd Case

Voici ce que je peux et ne peux pas faire.

Je modifie la fonction de fusion(). Le changement que je fais n'a pas d'importance parce que je ne l'ai pas encore fait. ;) En ce moment, je me contenterai d'une déclaration imprimée.

J'ai deux références à fusionner(). Si je change la fonction en mergeBAD(), Eclipse me dit qu'il ne peut pas trouver merge(). Ça a du bon sens? J'avais l'habitude d'inclure dans mon chemin de construction de classe les deux jars que vous obtenez en téléchargeant la vélocité mais à la place j'ai créé un projet en utilisant les fichiers src fournis et utilisé ce projet en tant que dépendance. Encore une fois, le fait de ne pas trouver merge() quand je le renommer en mergeBAD me donne de l'espoir. Mais quand j'exécute mon serveur web, que je tape un point d'arrêt et que je fais un pas dans l'appel de fusion, il ne trouve pas la source! Je le pointe vers le projet encore une fois, et il "trouve" la source, aucun des changements que j'ai faits (en particulier les déclarations println) ne sont touchés. Ils sont simplement sautés. :(

Qu'est-ce qui peut être à l'origine de la terre verte de Dieu? Cela me rend fou: j'ai passé la journée entière à essayer de comprendre ce qui ne va pas, je ne peux pas continuer sans changer de vitesse. ce code de base est en cours d'exécution éclipse les fichiers de vitesse à partir?

un grand merci à l'avance SO! :)

Répondre

3

Ceci est un cas typique de confusion entre build classpath et exécution classpath.

Votre build classpath contient des références à votre projet Java (contenant les modifications à la vitesse) ... mais je parie que votre exécution classpath contient des références aux fichiers JAR Velocity d'origine.

Gestion build classpath et exécution classpath dans des projets Web sous Eclipse (le WTP - Projet Web Tools) a été en passant par des changements massifs au cours des dernières WTP libère. Nous pouvons vous guider à travers. Si vous avez physiquement ajouté les fichiers JAR de Velocity dans votre WEB-INF/lib, commençons par les supprimer.


OK, après avoir supprimé le fichier Velocity.jar de WEB-INF/lib, procédez comme suit:

  1. Cliquez droit sur le projet, sélectionnez "Propriétés".
  2. Accédez à "Java build path". Sélectionnez l'onglet "Projets" et assurez-vous que votre projet Velocity personnalisé (appelons-le "MyVelocity") est pas là.
  3. Toujours dans "Java build path", sélectionnez l'onglet "Bibliothèques" et assurez-vous qu'il n'y a pas de Velocity JAR. En suivant les étapes ci-dessus, nous avons nettoyé votre Web-App de toute référence à MyVelocity (votre projet) ou à tout autre Velocity JAR.

    Maintenant vient la partie amusante.Je vais vous expliquer comment "ajouter" correctement des projets Java à des projets Web en tant que dépendances. Dans les propriétés du projet, passez à Deployment Assembly.

  4. Cliquez sur "Ajouter".
  5. Sélectionnez "Projet" puis "Suivant".
  6. Sélectionnez "MyVelocity" et assurez-vous que la case "Web Library Reference" est cochée.
  7. Cliquez sur "Terminer".

Retour dans la boîte de dialogue Deployment Assembly, vous devriez maintenant voir MyVelocity mappée dans WEB-INF/lib/MyVelocity.jar.

Cliquez sur OK.

Ce que nous avons fait est de mapper MyVelocity en tant que dépendance WEB-INF/lib. En faisant cela, MyVelocity est automatiquement ajouté au chemin de compilation à la compilation. Il est donc important de ne pas l'ajouter vous-même au chemin de construction, ce qui entraîne des entrées de chemin de construction en double.

Tout devrait fonctionner pour vous maintenant. Dites moi si vous avez le moindre problème.

P.S. ces instructions sont correctes si vous développez un projet WAR autonome; si votre fichier WAR fait partie d'un fichier EAR, vous pouvez souhaiter (dans certaines circonstances, par exemple si MyVelocity est utilisé par d'autres modules J2EE dans l'EAR) pour mapper différemment MyVelocity vers un emplacement commun; Si c'est le cas, faites-le moi savoir et je développerai plus loin.

+0

Snap! :) Retour à la maison pour la journée, mais fera cette première chose demain!^_^ – bobber205

+0

J'ai enlevé le velocity-1.5.jar qui était dans mon WEB-INF/lib – bobber205

+0

Bon. Vérifiez maintenant pour nous que votre WebApp ne fonctionne pas *. Il devrait échouer avec un 'NoClassDefFoundError'. Une fois que vous faites cela, il est maintenant temps de configurer votre projet pour inclure votre nouveau projet Velocity Java "personnalisé" dans WEB-INF/lib. Je vais modifier ma réponse initiale avec des détails sur la façon de le faire. – Isaac

Questions connexes