Я весь день застрял в этой проблеме, я надеюсь, кто-то может помочь мне запустить мою программу.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! исключение.
вы уверены, что вы хотели написать «Netflix»? – F43nd1r
«nebula.provided-base» - это плагин netflix, это может быть связано с этим. Я честно не знаю, в чем проблема. –
gradle действительно поддерживает «предоставленный» изначально. Я не знаю, почему вы используете плагин. Я попросил netflix, потому что я думал о провайдере видео poular и не знал плагина. – F43nd1r