java.lang.NoClassDefFoundError:org / apache / http / conn / HttpClientConnectionManager

时间:2014-12-03 04:06:18

标签: java android classpath

我在Android应用程序中使用Mashape的API。 Mashape建议使用Unirest库。我已经包含了在unirest链接上提到的依赖项:http://unirest.io/java

我的依赖关系:

compile fileTree(dir: 'libs', include: ['*.jar'])
compile group:'com.mashape.unirest', name:'unirest-java', version:'1.3.26'
compile group:'org.apache.httpcomponents', name:'httpcore', version:'4.3.3'
compile group:'org.apache.httpcomponents', name:'httpclient', version:'4.3.6'
compile group:'org.apache.httpcomponents', name:'httpasyncclient', version:'4.0.2'
compile group:'org.apache.httpcomponents', name:'httpmime', version:'4.3.5'
compile group:'org.json', name:'json', version:'20141113'
compile 'com.android.support:appcompat-v7:21.0.+'

当我发出HTTPRequest时,我仍然会收到此错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/conn/HttpClientConnectionManager
    at com.mashape.unirest.http.HttpClientHelper.prepareRequest(HttpClientHelper.java:153)
    at com.mashape.unirest.http.HttpClientHelper.request(HttpClientHelper.java:133)
    at com.mashape.unirest.request.BaseRequest.asJson(BaseRequest.java:68)
Disconnected from the target VM, address: '127.0.0.1:58805', transport: 'socket'

Caused by: java.lang.ClassNotFoundException: org.apache.http.conn.HttpClientConnectionManager
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 5 more

我的java代码很简单:

HttpResponse<JsonNode> response = Unirest.get("https://testlink/all")
                    .header("X-Mashape-Key", TEST_KEY)
                    .asJson();

你能帮我解决一下这个问题吗?谢谢你的帮助!


更新 根据secondo的建议,我将httpclient更改为httpclient-android。我的依赖项现在看起来像这样:

    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile group:'com.mashape.unirest', name:'unirest-java', version:'1.3.26'
    compile group:'org.apache.httpcomponents', name:'httpclient-android', version:'4.3.5'
    compile group:'org.apache.httpcomponents', name:'httpcore', version:'4.3.3'
    compile group:'org.apache.httpcomponents', name:'httpcore-nio', version:'4.3.3'
    compile group:'org.apache.httpcomponents', name:'httpasyncclient', version:'4.0.2'
    compile group:'org.apache.httpcomponents', name:'httpmime', version:'4.3.5'
    compile group:'org.json', name:'json', version:'20141113'
    compile 'com.android.support:appcompat-v7:21.0.0'

重建项目并运行后,我收到此错误:

Error:Gradle: Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    H:\IDEs\Android\android-sdk\sdk\build-tools\21.1.1\dx.bat --dex --output H:\workspace\app\build\intermediates\dex\debug H:\workspace\app\build\intermediates\classes\debug H:\workspace\app\build\intermediates\dependency-cache\debug H:\workspace\app\build\intermediates\pre-dexed\debug\classes-4bcf10ca50c0eb5fadc28458c4bdfc2547896050.jar H:\workspace\app\build\intermediates\pre-dexed\debug\classes-5f3630f6ee4db4f375d08625dd3729b85011cca4.jar H:\workspace\app\build\intermediates\pre-dexed\debug\httpasyncclient-4.0.2-5690889a573efdb127c3d5c2454e7a393211dee6.jar H:\workspace\app\build\intermediates\pre-dexed\debug\httpclient-android-4.3.5-1f1bd070e63b095d84e38ae09b61037bfca0f0ab.jar H:\workspace\app\build\intermediates\pre-dexed\debug\httpcore-4.3.3-ee2fa72794df9164a47403637dad2f0f578b8086.jar H:\workspace\app\build\intermediates\pre-dexed\debug\httpcore-nio-4.3.3-a277a34ed4caa7515de7b22c51b9b5f43eb3a9ac.jar H:\workspace\app\build\intermediates\pre-dexed\debug\httpmime-4.3.5-ed96b5f192c9ed4e3cca5097f8fe8a3d2a673970.jar H:\workspace\app\build\intermediates\pre-dexed\debug\internal_impl-21.0.0-529c245f53e03251f5328b23447088bd0d76c596.jar H:\workspace\app\build\intermediates\pre-dexed\debug\support-annotations-21.0.0-bc18e9201600d41ee5718ce129ef80828a7bb5d5.jar H:\workspace\app\build\intermediates\pre-dexed\debug\unirest-java-1.3.26-7ee6377b956e1b237982bd82965679bf6e0a7fa9.jar
Error Code:
    2
Output:
    UNEXPECTED TOP-LEVEL EXCEPTION:
    com.android.dex.DexException: Multiple dex files define Lorg/apache/http/Consts;
        at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596)
        at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)
        at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)
        at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
        at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
        at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)
        at com.android.dx.command.dexer.Main.runMonoDex(Main.java:302)
        at com.android.dx.command.dexer.Main.run(Main.java:245)
        at com.android.dx.command.dexer.Main.main(Main.java:214)
        at com.android.dx.command.Main.main(Main.java:106)

2 个答案:

答案 0 :(得分:1)

您的项目中没有用于跟踪classe的类文件。

org/apache/http/conn/HttpClientConnectionManager

因此,请在项目库中添加jar文件,您可以从下面的链接

下载此jar文件

Download Jar File

答案 1 :(得分:0)

转到项目/属性/ Java构建路径/订单和导出 - 如果您使用它,请确保在Android Dependencies和支持库前面进行检查。

标记所有复选框,然后单击“应用”并清除项目。