2009-08-23 9 views
1

私のコントローラ(抽象コントローラ)はURLを取得するためにサービスクラスを呼び出しています。Springはインポートされたクラスを見ることができません

抽象コントローラ:

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(); 

サービスクラス:私のサービスクラスでは、私は、コンストラクタで、私の依存関係をインスタンス化

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

をしかし、私は私のWebアプリケーションを実行しようとすると、春はスロー次のエラー:

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) 

なぜこのエラーが発生しますか?わかりません。 Twitterクラスを使用するサービスクラスにTwitterクラスをインポートしました。

答えて

1

ClassLoaderインスタンスがクラスの定義を読み込もうとしたときにNoClassDefFoundErrorが発生し、そのクラスの定義が見つかりませんでした。

これは基本的に、実行時にクラスパス上にクラスが見つからないことを意味します。コードにインポート宣言が必要ですが、それを動作させるには十分ではありません。また、twitterj.Twitterを含むjarがアプリケーションのクラスパス上にあることを確認する必要があります。

これを行う最も簡単な方法は、アプリケーションのWEB-INF/libフォルダにjarをコピーすることです。または、ツール(例:MavenIvyAnt、またはEclipseのようなIDE)を使用して、必要なジャーが戦争にパッケージ化されていることを確認します。

+0

返信いただきありがとうございます。すでにライブラリをweb-inf/libフォルダにコピーしました。今それは動作します! これは私が過去に行ったいくつかの仮定を変更します。私は、輸入声明を書いても大丈夫だと思った。デベロッパーとプロダクション環境には異なるクラスパスがあることが判明しました。 (私はそれを得ましたか?) – Jeune

+0

はい与えられた環境のクラスパスは、いくつかの理由で異なっています。 Java WebアプリケーションはWEB-INF/libの内容にアクセスでき、他のクラスパス要素は変更される可能性があります –

0

WEB-INF/libディレクトリにtwitter4j jarファイルがありますか?

関連する問題