2009-08-23 13 views
1

Mon contrôleur (contrôleur abstrait) appelle une classe de service pour obtenir une URL. Dans ma classe de service que j'instancier ma dépendance dans le constructeur:Le printemps ne peut pas voir mes classes importées

le contrôleur abstrait:

public class MyPageController extends AbstractController{ 
private UserService userService; 
private LearnerService learnerService; 
private TwitterService twitterService; 
@Override 
protected ModelAndView handleRequestInternal(HttpServletRequest request, 
     HttpServletResponse response) throws Exception { 
    userService = UserServiceFactory.getUserService(); 
    learnerService = new LearnerService(); 
    twitterService=new TwitterService(); 

la classe de service:

public TwitterService(){ 
    // 
    twitter = new Twitter(); 
} 

mais quand je tente d'exécuter mon application web, le printemps lancers francs l'erreur suivante:

nested exception is java.lang.NoClassDefFoundError: twitter4j/Twitter: 
    java.lang.NoClassDefFoundError: twitter4j/Twitter 
    at com.hardwire.service.TwitterService.<init>(Twitter Service.java:21) 
    at com.hardwire.controller. 
    MyPageController.handleReq uestInternal(MyPageController.java:30) 

Pourquoi lance-t-il cette erreur? Je ne comprends pas. J'ai importé la classe Twitter dans la classe de service qui l'utilise.

Répondre

1

Vous obtenez une erreur NoClassDefFoundError si l'instance ClassLoader essaie de charger dans la définition d'une classe et qu'aucune définition de la classe n'a été trouvée.

Cela signifie essentiellement que la classe n'est pas trouvée sur le chemin de classe lors de l'exécution. Avoir une déclaration d'importation dans votre code est requis mais pas suffisant pour le faire fonctionner, vous devez également vous assurer que le jar contenant twitterj.Twitter est sur le chemin de classe de l'application. La méthode la plus simple consiste à copier le fichier JAR dans le dossier WEB-INF/lib de l'application. Ou utilisez un outil (comme Maven, Ivy, Ant ou même un IDE comme Eclipse) pour vous assurer que les pots requis sont emballés dans votre guerre.

+0

Merci pour la réponse. J'ai déjà copié la bibliothèque dans le dossier web-inf/lib. Maintenant ça marche! Cela modifie certaines hypothèses que j'ai eu dans le passé. Je pensais que c'était juste d'avoir une déclaration d'importation. Il s'avère que le dev et l'environnement de production ont des chemins de classes différents! (Ai-je bien compris?) – Jeune

+0

oui le chemin de classe d'un environnement donné peut être différent pour un certain nombre de raisons. Une webapp Java aura accès au contenu de WEB-INF/lib, tous les autres éléments de classpath sont susceptibles de changer –

0

Avez-vous le fichier twitter4j dans votre répertoire WEB-INF/lib?

Questions connexes