2016-11-24 2 views
-1

私はSpringとApache HTTPComponentsを使って簡単なJava HTTPクライアントアプリケーションを作成しました。私はそれを実行すると、それは例外で失敗しますHttpClientにhttpasyncclientが必要なのはなぜですか?

java.lang.NoClassDefFoundError: org/apache/http/nio/client/HttpAsyncClient 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at my.package.<init>(MyClientTest.java:60) 

この行のコードは次のとおりです。

private final RestTemplate restTemplate = 
    new RestTemplate(new HttpComponentsAsyncClientHttpRequestFactory()); 

私は私のビルドに依存関係を追加することで、これを治すことができます。

<dependency> 
     <groupId>org.apache.httpcomponents</groupId> 
     <artifactId>httpasyncclient</artifactId> 
     <version>4.1.2</version> 
     <scope>test</scope> 
    </dependency> 

しかし、なぜこれを行う必要がありますか?私は明示的に非同期の何かをしていない。私はMavenが自動的に必要な依存関係をもたらすと考えていました。あなたが誤って非同期リクエストの工場を求めていない

+0

@KlausGroenbaekコーポレートコーダーとして、私は問題でほとんど選択肢がありません。しかしそれは私たちに大きな問題を引き起こしません。 – slim

+0

クローズアップ投票者に - このQ&Aを追加しました。私は問題を発見するのに半日を費やしていたので、SOに答えが欲しいと願っていました。非常に多くの人が、この特定のクラスに関する他の場所で同様の質問をしてきましたが、クラスパスで非同期のjarファイルを取得する必要があるという答えを得ました。私はほとんどの場合、彼らが本当にそれを必要としなかったと思う。 – slim

+0

stacktrace全体を投稿できますか?この問題が発生したときにどのクラスを読み込んでいますか。 –

答えて

-1

チェック - 例えば:私はこれに遭遇し

private final RestTemplate restTemplate = 
    new RestTemplate(new HttpComponentsAsyncClientHttpRequestFactory()); 

、IDEの自動補完は私にHttpComponentsAsyncClientHttpRequestFactoryを与えた - おそらくそれはアルファベット順でHttpComponentsClientHttpRequestFactory前に来るので、私Asyncがそこに押し込まれているのを見るのに十分注意深く見なかった。

HttpComponentsAsyncClientHttpRequestFactoryはSpringの一部であり、ApacheのHttpAsyncClientにランタイム依存関係があります。

代わりにHttpComponentsClientHttpRequestFactoryを使用する場合、httpasyncclient jarは必要ありません。

関連する問題