1

gradle を使用してjson-schema-validatorを Android テスト プロジェクトに追加しようとしていますが、いくつかの問題が発生します。

  1. でファイルが重複しjson-schema-validatorjson-schema-coreいて、テスト プロジェクトをビルドできなかったので、それらを除外しましたpackagingOptions
  2. テストの実行中にファイルが見つかりません: Android テストの実行中に、例外が発生しました

    JsonSchemaFactory factory = JsonSchemaFactory.byDefault();

私の推測では、JsonLoader はテスト プロジェクトで /draftv4/schema を見つけることができませんでした

誰もがそれをAndroidテストに正常に追加したか、JsonLoaderが正しいファイルを取得するのにどのように役立つか. ありがとう

ビルド スクリプトと例外スタック トレースは次のとおりです。

buildscript {
    repositories {
        mavenLocal()
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.12.+'
    }
}

allprojects {
    repositories {
        mavenCentral()
    }
}

apply plugin: 'android'

android {
    packagingOptions {
        exclude 'LICENSE.txt'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'APK META-INF/ASL-2.0.txt'
        exclude 'META-INF/ASL-2.0.txt'
        exclude 'META-INF/LGPL-3.0.txt'
        exclude 'ASL-2.0.txt'
        exclude 'LGPL-3.0.txt'
        exclude 'LICENSE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'draftv3/schema'
        exclude 'draftv4/schema'
    }
    compileSdkVersion 19
    buildToolsVersion "19.1.0"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 18
        renderscriptTargetApi 19
        renderscriptSupportMode true

        testApplicationId "com.sample.test"
        testInstrumentationRunner "android.test.InstrumentationTestRunner"
    }

    buildTypes {
        debug {
            debuggable true
            zipAlign false
        }
    }

    sourceSets {
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }

}

dependencies {
    repositories {
        mavenCentral()
        maven {
            url 'https://oss.sonatype.org/content/repositories/snapshots/'
        }
    }
    // Other dependencies

    androidTestCompile 'junit:junit:3.8'
    androidTestCompile ("com.github.fge:json-schema-core:1.2.3");
    androidTestCompile ('com.github.fge:json-schema-validator:2.1.8')
    androidTestCompile 'org.mockito:mockito-all:1.9.5'
}

apply plugin: 'idea'

idea {
    module {
        testOutputDir = file('build/test-classes/debug')
    }
}

    java.lang.ExceptionInInitializerError
at com.github.fge.jsonschema.SchemaVersion.<init>(SchemaVersion.java:65)
at com.github.fge.jsonschema.SchemaVersion.<clinit>(SchemaVersion.java:44)
at com.github.fge.jsonschema.core.load.configuration.LoadingConfigurationBuilder.<init>(LoadingConfigurationBuilder.java:117)
at com.github.fge.jsonschema.core.load.configuration.LoadingConfiguration.byDefault(LoadingConfiguration.java:151)
at com.github.fge.jsonschema.main.JsonSchemaFactoryBuilder.<init>(JsonSchemaFactoryBuilder.java:66)
at com.github.fge.jsonschema.main.JsonSchemaFactory.newBuilder(JsonSchemaFactory.java:120)
at com.github.fge.jsonschema.main.JsonSchemaFactory.byDefault(JsonSchemaFactory.java:110)
at com.chatwing.managers.ApiManagerImplTest.assertRegisterValidationError(ApiManagerImplTest.java:115)
at com.chatwing.managers.ApiManagerImplTest.testRegisterChatWingWithDuplicateEmail(ApiManagerImplTest.java:191)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701)
Caused by: java.io.IOException: resource /draftv4/schema not found
at com.github.fge.jackson.JsonLoader.fromResource(JsonLoader.java:91)
at com.github.fge.jsonschema.SchemaVersion.<init>(SchemaVersion.java:63)
... 21 more
4

2 に答える 2

2

Gradle 0.9.1 から、以下がサポートされています。

android.packagingOptions {
    pickFirst '/draftv4/schema'
}

詳細については、Gradle リリース ノートを参照してください。

于 2015-09-27T17:45:28.633 に答える
0

私は自分の質問に対して回避策を実行しました。

/draftv4/schema欠落していた理由は、提案どおりに除外したためです。それらの1つのバージョンを保持すると思っていましたが/draftv4/schema、プロジェクトにはないようです。

json-schema-coreそのため、手動で複製して削除/draftv4/schemaし、/draftv3/schema. また、メイン gradle ビルドでこれらのファイルの除外を削除します。その後、すべてが順調です。

まだ回避策であるため、この回答を受け入れることはできません。build.gradle でこれらのファイルを除外するより良い方法はありますか?

于 2014-07-14T06:10:02.833 に答える