简体   繁体   中英

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

I am using an API from Mashape in an Android application. Mashape recommends using the Unirest library. I have included the dependencies mentioned on the unirest link: http://unirest.io/java

My Dependencies:

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.+'

I still get this error when I make a 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

My java code is simple:

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

Could you please help me solve this issue? Thanks for your help!


UPDATE: As per secondo's suggestion I changed the httpclient to httpclient-android. My dependencies look like this now:

    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'

After rebuilding the project and running it, I get this error:

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)

there is no class file in your project for following classe.

org/apache/http/conn/HttpClientConnectionManager

So please add jar file in your project library you can downalod this jar file from below link

Download Jar File

Go to Project/Properties/Java Build Path/Order and Export -- Make sure there's a check in front of Android Dependencies and the support library, if you use it.

Mark all checkboxes and Click on Apply and clean the project.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM