2016-05-17 111 views
2

這是我的設置。我有一個Android項目與幾個Java(而不是Android)模塊。使用Spock和Java 8運行Android應用程序的問題

最近我開始使用Spock(這是一個基於JUnit和Groovy的測試框架)。

在Java模塊我簡單地使用Groovy插件是這樣的:

apply plugin: 'groovy' 

然後包括這些依賴關係:

dependencies { 
    testCompile 'org.spockframework:spock-core:1.0-groovy-2.4' 
    testCompile 'org.codehaus.groovy:groovy-all:2.4.6' 
    testCompile 'cglib:cglib-nodep:3.1' 
    testCompile 'org.objenesis:objenesis:2.2' 
} 

在我的主要Android應用我有這樣的設置。在根項目我有這樣的類路徑依賴:

classpath 'org.codehaus.groovy:gradle-groovy-android-plugin:0.3.9' 

和應用模塊上我套用:

apply plugin: 'groovyx.grooid.groovy-android' 

並配置爲這樣:

androidGroovy { 
    options { 
    configure(groovyOptions) { 
     // used so groovy can do it's magic, I think, not 100% sure 
     javaAnnotationProcessing = true 
    } 
    } 
    skipJavaC = true // if disabled my CPU melts for some reason 
} 

我也啓用在Android上使用Jack標誌的Java 8:

jackOptions { 
    enabled true 
} 

所有測試都使用Spock運行(即使是應用程序模塊上的測試)。但是,當我嘗試在設備或模擬器上運行應用程序時,我從Android Studio中收到多個錯誤。該錯誤發生在任務:compileDebugGroovyWithJack,它會抱怨不能找到任何來自外部的依賴關係(包括支持庫)的類:

enter image description here

有沒有人碰到這個問題之前來的呢?這是一個相當封鎖:(

回答

0

好,經過進一步調查,我發現,那裏有在玩了兩件事這裏:

  • 我有skipJavaC = trueandroidGroovy擴展名,因爲否則編譯器會接管我的cpu,但是
  • 這是由於標誌org.gradle.parallel設置爲true引起的。

一旦我評論了兩種配置,項目就完美地編譯了。通過check並部署到模擬器:)

0

這個「應該」的工作假設JVM測試運行的方式仍然是以前插孔被添加到工具鏈相同。這是compileJava仍然是一項任務,因爲這是什麼Groovy Android插件依賴。

話雖這麼說,這是不支持,可能需要掛接到新的進程以不同的方式。

+0

我正在應用Groovy插件的項目是純Java項目,而不是Android。事實上,如果我禁用了主應用程序模塊中的android groovy插件,該應用程序運行時沒有問題(但未找到測試) – pablisco

+0

您可能不想跳過javac。當你這樣做時,你告訴groovy編譯器編譯所有可能完全跳過jack和jill編譯器的所有東西。 同樣這不被支持,並且很可能需要定製您的gradle腳本來完成此操作。 – Pieces

+0

如果沒有skipJavaC,編譯將永不停止並佔用CPU – pablisco