2013-02-14 45 views
7

私はNoClassDefFoundErrorが - エクリプス - ApacheのHTTPClientの

(GoogleのApp Engineの上、後に展開されるように)日食JUNO(桟橋ウェブサーバ)から、単純なRESTベースのアプリケーションを実行しようとしているがここに私のコードです:

package co.suhas.live; 

import java.io.IOException; 
import javax.servlet.http.*; 

import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 

@SuppressWarnings("serial") 
public class AppServlet extends HttpServlet { 
public void doGet(HttpServletRequest req, HttpServletResponse resp) 
     throws IOException { 
    resp.setContentType("text/plain"); 
    resp.getWriter().println("Hello, world"); 

    HttpClient httpclient = new DefaultHttpClient(); 
    HttpGet httpget = new HttpGet(
      "http://www.google.com/search?q=google"); 

    HttpResponse response = httpclient.execute(httpget); 

    resp.getWriter().println(response.toString()); 
    } 
} 

Apache HTTPクライアント BUILD PATHにjarファイルを追加しました。

含む:

commons-codec-1.6.jar 
commons-logging-1.1.1.jar 
fluent-hc-4.2.3.jar 
httpclient-4.2.3.jar 
httpclient-cache-4.2.3.jar 
httpcore-4.2.2.jar 
httpmime-4.2.3.jar 

しかし、私はlocalhost上でそれを実行したときに、私はこのエラーを取得する:私が間違って

HTTP ERROR 500 

Problem accessing /app. Reason: 

org/apache/http/client/methods/HttpUriRequest 

Caused by: 

java.lang.NoClassDefFoundError: org/apache/http/client/methods/HttpUriRequest 
at java.lang.Class.getDeclaredConstructors0(Native Method) 
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2404) 
at java.lang.Class.getConstructor0(Class.java:2714) 
at java.lang.Class.newInstance0(Class.java:343) 
at java.lang.Class.newInstance(Class.java:325) 
at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153) 
at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:428) 
at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339) 
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 
at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:61) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:94) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:383) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at org.mortbay.jetty.Server.handle(Server.java:326) 
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) 
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547) 
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 

何をしているのですか?

答えて

1

eclipseからこのプロジェクトを削除してこの問題を修正しました。 .metadataフォルダをworkspaceに削除し、Eclipseを再起動してからプロジェクトを再度インポートしてください。私は何が問題であったのか分からない。

+2

クラシックJava。IntelliJに似た問題があります。コードが壊れました。私はそれをチェックインしたときに私が知っているバージョンに戻りました。 –

1

Webサーバー上で実行されるプロジェクトなので、ライブラリをこのサーバーに展開する必要があります。あなたはこれを行うためにEclipseデプロイメントアセンブリを試すことができます。

+0

私はこれを行いました! EclipseのQuick Fixを使用して、サーバーのPATHに追加しました。しかし、まだ使用していません。 –

+0

展開アセンブリのweb-inf/libディレクトリに追加します。 – sschrass

+0

Eclipseは、** WEB-INF/lib **にクイックフィックスで自動追加しました。そう。 : –

0

生成されたwarファイルを参照してください。あなたは7zipのようなzipエクスプローラでこれを行うことができます。どのjarファイルがwarファイルの/ libにパッケージ化されているか調べて、httpclient-4.2.3.jarが含まれていることを確認してください。見つからない場合は、私のSatelliteSDの提案を取ることができます。

+0

'httpclient-4.2.3.jar'は/ libに含まれています –

+2

おそらく、私が期待しているように、Jettyはwarファイルを探していません。私はJetを使っていくつかの問題を抱えていたので、TomcatやGlassfishのような使い慣れた別のWebサーバーを試してみることをお勧めします。 – Thorn

+0

多分、私はそれだけでコマンドラインにする必要があります。 –

4

Eclipseプラグインの観点から。同じ問題が発生し、次の手順で解決しました。

  1. libフォルダをルートに追加します。
  2. 追加のjarファイル
  3. オープンMANIFEST.MFファイル、
  4. 出力にファイルを追加
  5. は、[ビルド]タブにクラスパスに
  6. ゴー項目を追加ランタイム]タブに移動します

enter image description here

enter image description here

0

gwtを使用している場合、gwt-dev.jarには複数のapacheプロジェクトが含まれているため、プログラムがコンパイルされて開発中に実行される可能性があるので注意してください。必要な瓶。インテリJ 12人のユーザーの場合

1

1)は、プロジェクト構造 - >ライブラリからライブラリを削除します。 enter image description here

2)プロジェクトをMavenリポジトリから再追加します(プロジェクト構造内にある場合は、「+」をクリックして「From Maven ...」を選択します)。次に表示されるダイアログで、「com.amazonaws:aws-java-sdk」と入力して検索を開始します。検索が完了したら、希望のバージョンを選択してください。enter image description here

3)IJ12が警告する壊れたものを「修正」するために通常のプロンプトに従ってください。プロジェクトをリロードするように指示されることがあります。

それは私のためにそれを修正しました。 @ user2032663と@orberkovのおかげで、それはIDEの問題であることを指摘してくれました。

注! :OpenDNSを使用していて、IntelliJ12のMavenクライアントがlibs> 1.4.1を見つけられませんでした。私はGoogle DNS(8.8.8.8と8.8.4.4)を使用して再試行し、再試行しました。 1.5.8。

0

この問題を経験したとき、Fluent APIをMavenの依存関係として追加したときに、既に使用していたものとは異なるバージョンのHTTPClient APIがインポートされていました。どちらのバージョンのAPIも、結果として生じるJARのlibフォルダにパッケージ化されていました。バージョンの競合がこのエラーの原因です。

クラスパスにエントリを追加すると、使用するバージョンを手動で指定するだけで問題が解決されます。しかし、根本的な問題を解決するために、私はターゲットフォルダを削除してから再ビルド(またはmaven cleanを実行)する必要がありました。これにより、 "キャッシュされた"ライブラリJARが削除され、次のビルドで正しいものだけが再ダウンロードされました。

誰かを助ける希望!

0

プロジェクトの.classpathファイルをバージョンコントロールのものと照合してください。 Eclipseは、IDEを使用してプロジェクトの依存関係/クラスパスを変更するときに、プラグインに関連するビットを失うのをうまくやっています。

0

これは動作します:

を使用すると、エラーで見ることができるように(上記のようにして)、あなたは瓶/ sの行方不明 - より具体的には - あなたが不足しているにhttp-クライアント瓶を。

これで、このjarファイルを手動で見つけ、クラスパス/サーバーのlibに追加するか、jettyの既存のjarファイルを使用するかを選択します。私は後者を好む。

C:\jetty-distribution-9.4.0.v20161208>java -jar start.jar --list-classpath 

出力は次のようになります:

Jetty Server Classpath: 
----------------------- 
Version Information on 34 entries in the classpath. 
Note: order presented here is how they would appear on the classpath. 
     changes to the --module=name command line options will be reflected here. 
0:     (dir) | ${jetty.base}\resources 
1:     3.1.0 | ${jetty.base}\lib\servlet-api-3.1.jar 
etc... 

あなたはjetty.homeで次のコマンドは、桟橋サーバによって実行時にロードされたすべてのjarファイルが表示されます実行

このリストをチェックして、http-client jarが見つからないことがあります(、例えばjetty-client-9.4.0.v20161208.jar

Jettyはこのjarを読み込むことができます(libフォルダにあります)が、明示的に言及する必要があります。再びロードされたjarファイルのリストをチェックし、今

module=client 

- 桟橋 - クライアントJARがある;:

それを行うには、あなたの桟橋にstart.iniファイルを移動して、該当するモジュールを追加

これで、必要に応じてサーバーが起動します。

関連する問題