2016-05-09 45 views
1

http://swagger.io/を使用してクラスを生成し、クラスとモデルを含むzipファイルを取得しました。Swagger-UIのjarファイルを使用してAPIを呼び出せません

私はjarファイルをコンパイルし、それは私に、このエラーが発生しますlibにjarファイルとしての私のプロジェクトに追加します:

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 
} 

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 

これが闊歩生成されたライブラリのbuild.gradleファイルです

誰でも助けることができますか?

+0

のApache HTTP&Androidが持っている[長い](HTTP ://stackoverflow.com/questions/3577035/apache-httpclient-4-1-on-android)&[複雑](http://stackoverflow.com/questions/31653002/how-to-use-the-legacy- apache-http-client-on-android-marshmallow)history ..多分あなたはベースとして別のhttpライブラリを使ってクラスを生成できますか? – zapl

答えて

2

スワッガーエディターからデフォルトのテンプレートを生成しようとすると、apache httpバージョンが取得されます。

クローンSwagger-Codegen project from github、指示に従うとなどボレー、okhttp-gson、改造を、使用してクライアントを作る。.. Androidのボレークライアントを生成するには

UPDATE

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> 

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> 
012両方の場合

プロジェクトは、プロジェクトのフォルダに移動し、その後

mvn package 

を使用して、あなたは\ターゲット上のライブラリjarをFILDます生成した後

+0

私はそれを行う方法を教えてもらえますか?私はこれに初めてです "java -jar C:\ swagger-codegen-cli-2.1.6.jar generate -i を実行しました-lアンドロイド - o samples/client/sd/android " これは私にapache httpバージョンを渡しましたが、私はVolleyバージョンの生成方法を知らないです。 ありがとうございました:) –

+0

swagger-codegen githubページに関するその他の情報を確認したら、回答を更新しました。 – LightySnake

関連する問題