2016-01-24 2 views
0

Я весь день застрял в этой проблеме, я надеюсь, кто-то может помочь мне запустить мою программу.Gradle при условии, что зависимость JAR не работает должным образом

Я в здании аннотаций процессор для Android, в настоящее время он состоит из двух модулей: "MyModule" и "MyModule-компилятор"

MyModule-компилятор зависит от MyModule:

dependencies { 
    compile project(':mymodule') 
    ... 
} 

MyModule использует Netflix «при условии» плагин для Android:

apply plugin: 'nebula.provided-base' 

dependencies { 
    provided 'com.google.android:android:4.1.1.4' 
} 

Это на самом деле работает отлично, но когда я запускаю мой блок составитель тестов, много тестов, не потому, что А Определенная зависимость ndroid - v4.1.1.4, и мне действительно нужно v6.0. v6.0 недоступен на Maven (и похоже, что он никогда не будет, потому что Google не обновил его с 2012 года).

Я узнал, что Android SDK предоставляет версию «Unit Test» JAR для Android для каждой версии, в которой весь SDK «заглушен». Я предполагаю, что версии на Maven тоже вырезаны (?). Я могу легко захватить этот JAR и поместить его в свой проект под libs /.

Теперь, когда я обновляю MyModule Gradle файл:

dependencies { 
    provided files('libs/android.jar') 
} 

Мой проект все еще компилирует правильно, и я могу видеть v23 файлы! Однако, когда я бегу мои модульных тестов, я вижу следующее сообщение об ошибке:

!!! JUnit version 3.8 or later expected: 

java.lang.RuntimeException: Stub! 
    at junit.runner.BaseTestRunner.<init>(BaseTestRunner.java:5) 
    at junit.textui.TestRunner.<init>(TestRunner.java:54) 
    at junit.textui.TestRunner.<init>(TestRunner.java:48) 
    at junit.textui.TestRunner.<init>(TestRunner.java:41) 
    at com.intellij.rt.execution.junit.JUnitStarter.junitVersionChecks(JUnitStarter.java:205) 
    at com.intellij.rt.execution.junit.JUnitStarter.canWorkWithJUnitVersion(JUnitStarter.java:188) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:65) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 

Это не имеет значения, что Android баночке погасил, потому что я никогда не выполнится Android код, я только нужно это для импорта.

Есть ли у кого-нибудь идеи о том, что я вижу и как я могу это исправить?

EDIT 1: Дополнительная информация:

Если я извлекаю Android зависимости от MyModule полностью, и вместо того, чтобы поместить следующее в MyModule-compiler.gradle:

dependencies { 
    testCompile files('libs/android.jar') 
    ... 
} 

Все мои тесты будут проходить. Очевидно, это не исправление, поскольку «mymodule» нуждается в зависимости от Android.

EDIT 2:

делая такое же испытание, как EDIT 1, но с использованием Netflix условии охвата вместо testCompile тоже работает. Если я использую предоставленную область в обоих проектах, я получаю тот же Stub! исключение.

+0

вы уверены, что вы хотели написать «Netflix»? – F43nd1r

+0

«nebula.provided-base» - это плагин netflix, это может быть связано с этим. Я честно не знаю, в чем проблема. –

+0

gradle действительно поддерживает «предоставленный» изначально. Я не знаю, почему вы используете плагин. Я попросил netflix, потому что я думал о провайдере видео poular и не знал плагина. – F43nd1r

ответ

1

[Работал вместе с OP]

Местной баночка содержит дополнительные классы над Maven банкой, которые кажутся вмешиваться. Чтобы заставить его работать, удалите их из банки (в частности, в этом случае: все классы junit).

Сравнение двух банок (левая Maven банка, право местного банка): comparison

Смежные вопросы