2016-05-09 14 views
1

Ich generierte meine Klassen mit http://swagger.io/ und ich habe Zip-Dateien, die Klassen und Modelle enthält.Kann die API nicht mit der Jar-Datei von Swagger-UI aufrufen

Wenn ich eine JAR-Datei zusammenstellen und dann als ein Glas zu meinem Projekt hinzufügen lib es mir diesen Fehler gibt:

05-09 17:22:37.894 4589-4589/? E/ReportHandler: FATAL EXCEPTION: main 
java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/Consts; 
at io.swagger.client.ApiInvoker.<clinit>(ApiInvoker.java:66) 
at io.swagger.client.api.UserAuthenticationApi.<init>(UserAuthenticationApi.java:22) 
at com.selfdrvn.Selfdrvn.activities.LoginActivity$1.onClick(LoginActivity.java:99) 
at android.view.View.performClick(View.java:4780) 
at android.view.View$PerformClick.run(View.java:19866) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5254) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.Consts" on path: DexPathL,nativeLibraryDirectories=[/vendor/lib, /system/lib]] 
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:469) 
at io.swagger.client.ApiInvoker.<clinit>(ApiInvoker.java:66) 
at io.swagger.client.api.UserAuthenticationApi.<init>(UserAuthenticationApi.java:22) 
at com.selfdrvn.Selfdrvn.activities.LoginActivity$1.onClick(LoginActivity.java:99) 
at android.view.View.performClick(View.java:4780) 
at android.view.View$PerformClick.run(View.java:19866) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5254) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
Suppressed: java.lang.ClassNotFoundException: org.apache.http.Consts 
at java.lang.Class.classForName(Native Method) 
at java.lang.BootClassLoader.findClass(ClassLoader.java:781) 
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:504) 
     ... 14 more 
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available 

Dies ist die build.gradle-Datei für die Prahlerei erzeugte Bibliothek:

group = 'io.swagger' 
project.version = '1.0.0' 

buildscript { 
    repositories { 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:1.5.+' 

     classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3' 

    } 
} 

allprojects { 
    repositories { 
     jcenter() 
    } 
} 


apply plugin: 'com.android.library' 
apply plugin: 'com.github.dcendents.android-maven' 

android { 
    compileSdkVersion 22 
    buildToolsVersion '23.0.2' 
// useLibrary 'org.apache.http.legacy' 
    defaultConfig { 
     minSdkVersion 14 
     targetSdkVersion 23 
    } 
    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_7 
     targetCompatibility JavaVersion.VERSION_1_7 
    } 

    // Rename the aar correctly 
    libraryVariants.all { variant -> 
     variant.outputs.each { output -> 
      def outputFile = output.outputFile 
      if (outputFile != null && outputFile.name.endsWith('.aar')) { 
       def fileName = "${project.name}-${variant.baseName}-${version}.aar" 
       output.outputFile = new File(outputFile.parent, fileName) 
      } 
     } 
    } 
} 


ext { 
    swagger_annotations_version = "1.5.0" 
    gson_version = "2.3.1" 
    httpclient_version = "4.5.2" 
    httpcore_version = "4.4.4" 
    junit_version = "4.12" 
} 

dependencies { 
    compile "io.swagger:swagger-annotations:$swagger_annotations_version" 
    compile "com.google.code.gson:gson:$gson_version" 
    compile "org.apache.httpcomponents:httpcore:$httpcore_version" 
    compile "org.apache.httpcomponents:httpclient:$httpclient_version" 
    compile ("org.apache.httpcomponents:httpcore:$httpcore_version") { 
     exclude(group: 'org.apache.httpcomponents', module: 'httpclient') 
    } 
    compile ("org.apache.httpcomponents:httpmime:$httpclient_version") { 
     exclude(group: 'org.apache.httpcomponents', module: 'httpclient') 
    } 
    testCompile "junit:junit:$junit_version" 
} 

afterEvaluate { 
    android.libraryVariants.all { variant -> 
     def task = project.tasks.create "jar${variant.name.capitalize()}", Jar 
     task.description = "Create jar artifact for ${variant.name}" 
     task.dependsOn variant.javaCompile 
     task.from variant.javaCompile.destinationDir 
     task.destinationDir = project.file("${project.buildDir}/outputs/jar") 
     task.archiveName = "${project.name}-${variant.baseName}-${version}.jar" 
     artifacts.add('archives', task); 
    } 
} 

task sourcesJar(type: Jar) { 
    from android.sourceSets.main.java.srcDirs 
    classifier = 'sources' 
} 

artifacts { 
    archives sourcesJar 
} 

Kann jemand helfen?

+0

Apache HTTP & Android haben ein [lang] (http fild : //stackoverflow.com/questions/3577035/apache-httpclient-4-1-on-android) & [kompliziert] (http://stackoverflow.com/questions/31653002/how-to-use-the-legacy- apache-http-client-on-android-Marshmallow) Geschichte .. Vielleicht können Sie Ihre Klassen mit einer anderen http-Bibliothek als Basis generieren? – zapl

Antwort

2

Wenn Sie versuchen, die Standardvorlage von Swagger-Editor zu generieren, erhalten Sie die Apache-HTTP-Version.

Clone Swagger-Codegen project from github, folgen Sie den Anweisungen und den Client mit Volley machen, okhttp-Gson, Retrofit, etc ..

UPDATE

Um Android Volley-Client zu generieren:

java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate -i <your_path_to_swagger.json> -l android --library=volley -o <output_path> 

Zur Generierung von Java okhttp-gson:

java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate -i <your_path_to_swagger.json> -l java --library=okhttp-gson -o <output_path> 

In beiden Fällen, nachdem Sie das Projekt in den Projektordner navigieren generiert haben und dann

mvn package 

und Sie werden die Bibliothek Glas auf \ Ziel

+0

Können Sie mir helfen, wie ich es mache? Ich bin neu in diesem Ich lief "java -jar C: \ swagger-codegen-cli-2.1.6.jar erzeugen -i -l android- o proben/client/sd/android " und es gab mir die apache http-version, aber ich weiß nicht, wie man die Volley-Version erzeugt. Dank :) –

+0

Ich habe die Antwort aktualisiert, wenn Sie überprüfen, ob Sie andere Informationen über swagger-codegen github Seite finden. – LightySnake