2016-01-24 76 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' 
} 

這其實完美的作品,但是當我跑我的編譯器的單元測試套件,大量的試驗失敗,因爲A指定的ndroid依賴是v4.1.1.4,我實際上需要v6.0。 v6.0在Maven上不可用(並且看起來從未如此,因爲Google自2012年以來未更新它)。

我發現了Android SDK提供了對Android的每個版本,這是整個SDK「掐滅」一個「單元測試」 JAR版本。我假設Maven的版本也被刪除(?)。我可以輕鬆地抓住該JAR並將其放入libs /下的項目中。現在

當我更新的gradle MyModule的文件:

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的JAR被掐滅,因爲我從來沒有執行Android的代碼,我只需要進口。

有沒有人對我所看到的以及我如何解決這個問題有任何想法?

編輯1:更多信息:

如果我刪除從MyModule的Android的完全依賴,而是把下列mymodule中,compiler.gradle:

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

我所有的測試將通過。這顯然不是一個修復,因爲'mymodule'確實需要Android依賴。

編輯2:

否則相同的試驗作爲EDIT 1,但使用Netflix的提供範圍,而不是testCompile也可以。如果我在兩個項目中使用提供的範圍,我會得到相同的存根!例外。

+0

你確定你想寫「Netflix的」? – F43nd1r

+0

'nebula.provided-base'是一個netflix插件,它可能與此有關。我真的不知道問題是什麼。 –

+0

gradle在本地支持「提供」。我不知道你爲什麼使用插件。我詢問netflix是因爲我想到了poular video provider並且不知道這個插件。 – F43nd1r

回答

1

[與OP一起摸索出]

本地罐包含超過行家罐子附加的類,這似乎干擾。 爲了讓它工作從jar中刪除這些(特別是在這種情況下:所有的junit類)。兩個罐子

對比(左爲Maven的罐子,右邊是本地的jar):comparison