2017-04-26 61 views
2

我有一個混合(Java的& Groovy中)的IntelliJ項目。我的Groovy類正在使用@Builder註釋。我可以從Java訪問製造商,但在與失敗的項目的構建過程中出現失敗...的IntelliJ構建混合Groovy和Java項目失敗,並不能找到符號

Error:(27, 105) java: cannot find symbol 
symbol: method builder() 
location: class foo.bar.Sample 

如果我註釋掉的助洗劑,該項目建立完全正常,我可以看到生成器在生成的類文件中。

我認爲這個問題是構建順序,即javac的嘗試Groovy的代碼被編譯之前編譯我的Java代碼。

任何想法如何解決這個問題?

該版本的IntelliJ是社區2017年1月2日

*更新*

我儘量更詳細的關於我的項目...它是建立這樣的...

源根:

Project source roots

的數據對象的Groovy類:

import groovy.transform.builder.Builder 

@Builder 
class DataObject { 
    String message 
} 

而且MainClass ...

public class MainClass { 

    public static void main(String... args) throws Exception { 
     System.out.println(DataObject.builder().message("HelloWorld!").build().getMessage()); 

     DataObject dataObject = new DataObject(); 
     dataObject.setMessage("HelloWorld!"); 
     System.out.println(dataObject.getMessage()); 
    } 
} 

Groovy的Eclipse是在字節碼1.8版本設置爲Java編譯器(常規月食分批2.4.3-01.jar)

如果我嘗試編譯我得到了以下錯誤的項目... Build error

,我收到了類似的錯誤(java的:找不到建設者symbel),如果我用javac作爲Java compil試試吧呃。

如果我刪除了從使用Java類的建設者,項目完全建立,我能夠使用的建設者,至少只要我沒有對Groovy類的任何變化。

+0

你需要證明你是如何構建它。考慮'groovyc'而不是'javac' – Rao

+0

我不確定要顯示/準確描述什麼。我使用生成項目(Ctrl + F9)。 Java編譯器是Javac(1.8)來構建項目。我也嘗試過Groovy-Eclipse,但它導致了其他錯誤(與泛型和lambda流結合)。 Groovy編譯器沒有設置任何內容,但Groovy框架已添加到項目中。 如何設置groovyc作爲編譯器?在Java編譯器屏幕上看不到該選項 –

+0

這種情況下的常見修復方法是將.java文件放在源根目錄下,該目錄通過groovyc構建。 Groovyc只是用作.java文件的javac。 – cfrick

回答

2

你被https://issues.apache.org/jira/browse/GROOVY-3683影響。

假設你已經安裝了Groovy中使用sdkman

$ sdk use groovy 2.4.9 
Using groovy version 2.4.9 in this shell. 

# This is the error you get using joint compilation 
$ groovyc -j src/main/groovy/* 
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: 
Compile error during compilation with javac. 
/Users/danyjb/Downloads/GroovyTest/src/main/groovy/MainClass.java:4: error: cannot find symbol 
     System.out.println(DataObject.builder().message("HelloWorld!").build().getMessage()); 
            ^
    symbol: method builder() 
    location: class DataObject 
1 error 

要解決,你需要單獨編譯Groovy和Java的問題:

$ groovyc src/main/groovy/DataObject.groovy -d out/ 
$ javac -cp $GROOVY_HOME/lib/groovy-2.4.9.jar:out/ -d out/ src/main/groovy/MainClass.java 

在的IntelliJ IDEA而言,這意味着你需要把你的Groovy代碼的單獨的模塊中,並從添加一個依賴Java模塊添加到Groovy模塊。

相關問題