2013-12-10 114 views
8

在我的maven項目中,我正在將我的Java代碼與一些Groovy代碼混合使用。我現在主要使用Groovy來構建bean。我的一些Java代碼直接使用Groovy bean。配置IntelliJ以使用Groovy編譯器而不是Java編譯器

我配置了Maven的編譯器插件是這樣的: -

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.1</version> 
    <configuration> 
     <compilerId>groovy-eclipse-compiler</compilerId> 
     <source>${jdk.version}</source> 
     <target>${jdk.version}</target> 
    </configuration> 
    <dependencies> 
     <dependency> 
      <groupId>org.codehaus.groovy</groupId> 
      <artifactId>groovy-eclipse-compiler</artifactId> 
      <version>2.8.0-01</version> 
     </dependency> 
     <dependency> 
      <groupId>org.codehaus.groovy</groupId> 
      <artifactId>groovy-eclipse-batch</artifactId> 
      <version>2.1.5-03</version> 
     </dependency> 
    </dependencies> 
</plugin> 

當我運行使用mvn test我的測試用例,它工作得很好。

但是,當我通過右鍵單擊測試文件並運行它直接從IntelliJ運行測試用例時,Groovy bean上出現「無法找到符號」錯誤。當我讀取錯誤日誌時,IntelliJ使用Java編譯器在運行測試之前編譯我的項目...因此,測試失敗。

我似乎無法弄清楚如何指示IntelliJ始終使用Groovy編譯器而不是Java編譯器。

我應該在SDK下更改什麼,以便使用Groovy編譯器?我嘗試添加Groovy相關的JAR文件,但是我收到了其他錯誤。

enter image description here

更新1:每@Seagull建議

我補充下, 「全球圖書館」 常規JAR文件: -

enter image description here

當我直接從執行的測試文件IntelliJ,我得到了一些Groovy警告,我仍然得到相同的錯誤: -

enter image description here

謝謝。

+1

您是否對您的項目有Groovy Framework支持?嘗試添加它,方法是右鍵單擊項目視圖中的項目根文件夾,然後選擇一個現有的文件夾,或者創建一個新的Groovy sdk。此外,它還會在模塊依賴項中添加Groovy庫。 – Seagull

+0

我沒有選擇這樣做。我在「項目」設置下進入「Project SDK」,當我添加新的「JDK」並將其指向我下載的Groovy SDK時,它不會檢測到任何內容。 – limc

+0

Groovy沒有獨立的SDK,將在那裏列出。嘗試創建一個普通的「全局庫」,它的圖標將更改爲Groovy圖標。將它添加到你的模塊,它可能會工作。 – Seagull

回答

3

這是從的IntelliJ支持團隊於2014年1月2,關於這個問題的答覆: -

IDEA uses groovyc to generate Java stubs for Groovy classes to allow for seamless interop. Unfortunately stub generation code doesn't launch AST transformations (e.g. Immutable) and so the methods generated by those transformations don't make it into Java stubs, hence Java compiler doesn't see them.

Unfortunately I see no workarounds that don't require modifying your project. One would be to place Groovy files into a separate module. Another would be to change the call places into Groovy. The third one would be to replace @Immutable with @Canonical and generate the constructor so that it's actually in the code (and the stubs will contain it).

You may also vote/watch http://youtrack.jetbrains.com/issue/IDEA-52379 to support Eclipse Groovy compiler.

我最終消除雙方@Immutable@Canonical和創建自己的構造函數,原因有二: -

  • 它允許我直接從IntelliJ運行測試用例。
  • 它清理了JaCoCo代碼覆蓋率報告,該報告顯着地由由@Immutable@Canonical免費提供的未使用的構造函數引起。
5

我的MAC 10.10.5有這個問題上的IntelliJ ideaIC-15.0.3定製-JDK-bundled.dmg的最新版本,JDK 1.8.0_60

包括後代的所有步驟...

  1. 從終端,我安裝了最新版本的groovy,使用sdkmansdk install groovy 2.4.5
  2. 在的IntelliJ,上邊項目右鍵 - >選擇「添加框架支持...」>添加groovy 2.4.5(如果它尚未添加)。
  3. 在的IntelliJ, 「首選項」> 「建立,實施,部署」> 「編譯」> 「資源模式:」>更改從!?*.java;!?*.groovy的順序!?*.groovy;!?*.java
  4. 重新編譯項目(命令 + + F9),它現在應該成功編譯。